目录
c语言中关于字符串相关的库函数:
strlen
size_t strlen ( const char * str );
可以计算一个字符串的长度,包含在string.h的头文件里,从传入地址开始,到 '\0' 结束,返回这段字符串的长度,返回值为unsigned int
strcpy
char* strcpy(char * destination, const char * source );
可以将source这个地址处开始到下一个 '\0' 处结束的字符串拷贝到目标地址destination开始向后同样长度字节处。拷贝也会将字符串最后的 '\0' 拷贝到目标地址最后,返回目标destination处的地址。包含在string.h的头文件里
strcat
char * strcat ( char * destination, const char * source );
可以对目标处的字符串进行追加,追加内容为source地址处到下一个 '\0' 处,包含在string.h的头文件里。需要注意:source源字符串必须以 '\0' 结尾,目标空间必须足够容纳源字符串的内容;目标空间必须可修改(不能有常属性:用const修饰之类的)。
strcmp
int strcmp ( const char * str1, const char * str2 );
可以对两个字符串进行比对,包含在string.h的头文件里。比对规则:
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
不同编译器下可能对返回值得设定不同。
strncpy
char * strncpy ( char * destination, const char * source, size_t num );
可以对指定的num个字符进行拷贝,包含在string.h的头文件里。需要注意,如果源字符串的长度小于num的话,那么会在目标后面追加0,直到够num个。
strncat
char * strncat ( char * destination, const char * source, size_t num );
可以指定源字符串中的num个字符,将其追加到目标字符串后面,包含在string.h的头文件里。
strncmp
int strncmp ( const char * str1, const char * str2, size_t num );
可以指定str1与str2的num个字符进行比较,返回值的规则同上strcmp,包含在string.h的头文件里。
strstr
char * strstr ( const char * str1, const char * str2 );
返回str2第一次在str1中出现的地址,如果str1中没有出现str2的话,就返回NULL,包含在string.h的头文件里。
strtok
char * strtok ( char * str, const char * sep );
strtok函数,是按照参数sep中的符号将str进行分割返回,包含在string.h的头文件里。
sep:是一个符号集合,里面放着可以作为分割标志将str进行分割的标记,进行一个分割,就会将str中下一个存在sep中的分割标记的地址处改为 '\0' ;
str:被分割的源字符串,如果此参数为空,那就将返回上一个未分割完的字符串再次被标记分割的地址,如果参数为空,上一个字符串也被分割完,那就返回NULL;
返回值:每一个被标记分割的字符串的首地址,如果字符串已被分割完,则返回NULL。
strerror
char * strerror ( int errnum );
会返回错误码所对应的错误信息,包含在error.h的头文件里。
c语言中,有一个error全局变量,如果有错误发生,error就会自动接收错误码。这个时候只要将其用strerror函数转换为错误信息,就可以很好地看到具体发生了什么错误。
字符分类函数:
需要引入ctype.h
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,换页‘\f’,换行'\n',回车‘\r’,制表符'\t'或者垂直制表符'\v'
isdigit 十进制数字 0~9
isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F
islower 小写字母a~z
isupper 大写字母A~Z
isalpha 字母a~z或A~Z
isalnum 字母或者数字,a~z,A~Z,0~9
ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph 任何图形字符
isprint 任何可打印字符,包括图形字符和空白字符
字符转换:
需要引 ctype.h
tolower
int tolower ( int c );
将字符转为小写
toupper
int toupper ( int c );
将字符串转为大写
内存操作函数
前面说了字符串操作函数,就是操作字符串的各种函数,那内存操作函数,就是操作内存中的数据的一些函数了,这些函数可以不用管操作的对象类型,不管是字符,还是整数,还是浮点数,都可以对其就行拷贝,对比,移动等的操作。
memcpy
void * memcpy ( void * destination, const void * source, size_t num );
函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置(注意:是一个字节一个字节进行操作的)。这个函数在遇到'\0'的时候并不会停下来。如果source和destination有任何的重叠,复制的结果都是未定义的,返回目标空间的首地址。
在一些老的编译器中,对memcpy并没有进行优化,如果source和destination有重叠,那么执行结果就会出现定以后的数据在重复拷贝的情况。
memmove
void * memmove ( void * destination, const void * source, size_t num );
和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。如果源空间和目标空间出现重叠,就得使用memmove函数处理。
memcmp
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
比较从ptr1和ptr2指针开始的num个字节