C++常用函数解析

本文深入探讨了C++中常用函数的功能与应用,包括access()、atoi()、snprintf()、strcmp()、strcat()、memcpy()、memset()以及双冒号作用符的详细解释,为读者提供了丰富的代码示例和注意事项。
摘要由CSDN通过智能技术生成

access()函数

:判断是否具有存取文件的权限

头文件:#include <unistd.h>

定义函数:int access(const char *
pathname, int mode);

函数说明:access()会检查是否可以读/写某一已存在的文件。

参数mode 有几种情况组合:

1、R_OK, W_OK, X_OK和F_OK. R_OK, W_OK 与X_OK 用来检查文件是否具有读娶写入和执行的权限。

2、F_OK 则是用来判断该文件是否存在。由于access()只作权限的核查, 并不理会文件形态或文件内容,因此,如果一目录表示为"可写入",表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。例如:你会发现DOS 的文件都具有"可执行"权限,但用execve()执行时则会失败。

返回值:若所有欲查核的权限都通过了检查则返回0 值,表示成功,只要有一权限被禁止则返回-1。

错误代码:

1、EACCESS 参数pathname 所指定的文件不符合所要求测试的权限.

2、EROFS 欲测试写入权限的文件存在于只读文件系统内.

3、EFAULT 参数pathname 指针超出可存取内存空间.

4、EINVAL 参数mode 不正确.

5、ENAMETOOLONG 参数pathname 太长.

6、ENOTDIR 参数pathname 为一目录.

7、ENOMEM 核心内存不足

8、ELOOP 参数pathname 有过多符号连接问题.

9、EIO I/O 存取错误.

附加说明:使用 access()作用户认证方面的判断要特别小心, 例如在access()后再做open()的空文件可能会造成系统安全上的问题.

atoi 函数获取一个 C 字符串参数,返回与之对应的 int 值。

例如,atoi(“1234”)返回

整数 1234。如果参数不对应一个 int 值,atoi 就返回 0。例如,atoi("#37")会返回 0,

因为字符’#'并非数字。atoi 要念成“A to
I”,是“alphabetic to integer”的缩写。

atoi 函数在头文件为 cstdlib 的库中,所以要想在程序中使用该函数,必须包括以下预编译

#include

如果数字太大,不能转换成 int 类型的值,可考虑把它们从 C 字符串转换成 long 类型

的值。atol 函数可执行与 atoi 函数相同的转换,只是 atol 返回 long 值,能支持更大的整数

将 C 字符串转换成数值的函数

atoi,atol 和 atof 函数将数字构成的 C 字符串转换成对应的数值。atoi 和 atol

将 C 字符串转换成整数。atoi 和 atol 唯一的区别是 atoi 返回 int 值,而 atol 返回

long 值。atof 将 C 字符串转换成
double 值。如果 C 字符串实参无法转换成数字,这

些函数会返回 0。

例如:

int x = atoi(“657”);

将 x 的值设为 657,而

double y = atof(“12.37”);

将 y 的值设为 12.37。使用了这些函数的程序必须包含以下预编译指令:

#include

snprintf()函数

int snprintf(char *restrict buf, size_t n,
const char * restrict format, …);

函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n
的话,将不会溢出。

函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。

strcmp()判断两个字符串是否相等

#include “stdafx.h”

#include<stdio.h>

#include<string.h>

#include

#include <iostream.h>

//int strcmp(const char *str1,const char *str2);

using namespace std;

int _tmain(int argc, _TCHAR*
argv[])

{

char *s1=“Hello,Programmers!”;

char *s2="Hello,programmers!";

int r;

clrscr();

    cout<<"dddd"<<endl

r = strcmp(s1,s2);

    

if(!r){

             cout<<"dddd"<<endl

    printf("s1 and s2 are identical");

        }else if(r<0){

    printf("s1 less than s2");

        }else{

    printf("s1 greater than s2");

                } getchar();

return 0;

}

/*int strcmp(const char *str1,const char *str2)

{

/*不可用while(*str1++==*str2++)来比较,当不相等时仍会执行一次++,

return返回的比较值实际上是下一个字符。应将++放到循环体中进行。*/

while(*str1

== *str2)

{

    if(*str1

== ‘\0’)

        return0;

     

    str1++;

    str2++;

}

return *str1 - *str2;

}*/

strcmp()
用来比较字符串(区分大小写),其原型为:

int
strcmp(const char *s1, const char *s2); 【参数】s1, s2 为需要比较的两个字符串。

    字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。

【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。

#include

#include

using namespace std;

int _tmain(int argc, _TCHAR*
argv[])

{

    char *a = "aBcDeF";

char *b = "AbCdEf";

char *c = "aacdef";

char *d = "aBcDeF";

printf("strcmp(a,

b) : %d\n",
strcmp(a, b));

printf("strcmp(a,

c) : %d\n",
strcmp(a, c));

printf("strcmp(a,

d) : %d\n",
strcmp(a, d));

    /*输出结果:

    strcmp(a, b)

: 1

    strcmp(a, c)

: -1

    strcmp(a, d)

: 0*/

    return 0;

}

strcat()函数用于连接两个 C 字符串

函数用于连接两个 C 字符串;换言之,它使两个较短的 C 字符串首尾相连,从而构成一个较长的。第一个参数必须是 C 字符串变量。第二个参数可以是最终求值为 C 字符串值的任何东西,比如一个引号字符串

memcpy()可以复制任意内容,例如字符数组、整型、结构体、类等

/*#include “stdafx.h”

#include

#include

using namespace std;

//内存拷贝函数: EXTERN void *memcpy(void *dest, const void *src, size_t
n);

// memcpy可以复制任意内容,例如字符数组、整型、结构体、类等

int _tmain(int argc, _TCHAR* argv[])

{

    //将s中的字符串复制到字符数组d中

    /*char*

s=“GoldenGlobalView”;

    char d[20];

    memcpy(d,s,(strlen(s)+1));

    printf("%s",d);//GoldenGlobalView

    getchar();*/





    //作用:将s中的字符串复制到字符数组d中

    /*char*

s=“GoldenGlobalView”;

    char d[20];

    memcpy(d,s+12,4);//从第13个字符(V)开始复制,连续复制4个字符(View)

    d[4]='\0';//memcpy(d,s+12*sizeof(char),4*sizeof(char));也可

    printf("%s",d);//View

    getchar();*/





    //作用:复制后覆盖原有部分数据

    char src[]="******************************";

    char dest[]="abcdefghijlkmnopqrstuvwxyz0123as6";

    printf("destination

before memcpy:%s\n",dest);

    memcpy(dest,src,strlen(src));

    printf("destination

after memcpy:%s\n",dest);

    //destination

after memcpy:******************************as6

    return 0;

}*/

memset函数使用详解

/*void
*memset(void *s, int c, size_t n);

总的作用:将已开辟内存空间 s 的首
n 个字节的值设为值 c。

memset() 函数常用于内存空间初始化。

memset可以方便的清空一个结构类型的变量或数组。

#include “stdafx.h”

#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

    char

buffer[]=“Helloworld\n”;

    printf("Buffer

before memset:%s\n",buffer); //Buffer before memset:Helloworld

    memset(buffer,0,strlen(buffer));

    printf("Buffer

after memset:%s\n",buffer); //Buffer after memset:

    return

0;

}*/

C++双冒号::的作用

1.作用域符号::的前面一般是类名称,后面一般是该类的成员名称

如:A,B表示两个类,在A,B中都有成员member。那么

A::member就表示类A中的成员member

B::member就表示类B中的成员member

2.全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如:

char
zhou; //全局变量

void sleep()

char
zhou; //局部变量

char(局部变量) = char(局部变量) *char(局部变量) ;

::char(全局变量) =::char(全局变量) *char(局部变量);

::是C++里的“作用域分解运算符”。比如声明了一个类A,类A里声明了一个成员函数voidf(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成voidA::f(),表示这个f()函数是类A的成员函数。例如

class CA {

public:

int ca_var;

int add(int a, int b);

int add(int a);

};

//那么在实现这个函数时,必须这样书写:

int CA::add(int a, int b)

{

return a + b;

}

//另外,双冒号也常常用于在类变量内部作为当前类实例的元素进行表示,比如:

int CA::add(int a)

{

return a + ::ca_var;

}

//表示当前类实例中的变量ca_var。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值