一、求字符长度---strlen

二、长度不受限制的字符串函数---strcpy、strcat、strcmp

三、长度受限制的字符串函数介绍---strncpy、strncat、strncmp

四、字符串查找---strstr、strtok

五、错误信息报错---strerror

六、字符操作

七、内存操作函数---memcpy、memmove、memset、memcmp


字符串通常是放在常量字符串中或者字符数组

一、求字符长度

strlen:   size_t strlen ( const char * str );

  • 字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包括'\0')
  • 参数指向的字符串必须要以'\0'结束
  • 注意函数的返回值为size_t,是无符号的( 易错 )

C语言心得6(字符函数和字符串函数的使用和刨析)_字符串函数

二、长度不受限制的字符串函数

strcpy:将src字符串(bit)复制到dest字符串(helloworld),输出的dest为src(bit)

char* strcpy ( char* destination, const char* source );

  • 源字符串必须以'\0'结尾,否则可能会导致访问越界
  • 会将'\0'拷贝到目标空间
  • 目标空间必须足够大
  • 目标空间必须可变

C语言心得6(字符函数和字符串函数的使用和刨析)_常用的_02

strcat:在dest字符串(hello)后面追加src字符串(world),输出dest为helloworld

char* strcat ( char* destination,const char* source);

  • 源字符串必须以'\0'结尾
  • 目标空间必须有足够大,能包含源字符串空间
  • 目标空间必须可修改

C语言心得6(字符函数和字符串函数的使用和刨析)_常用的_03

strcmp:字符串比较

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

  • 第一个字符串 > 第二个字符串,则返回大于0的数字
  • 第一个字符串 = 第二个字符串,则返回0
  • 第一个字符串 < 第二个字符串,则返回小于0的数字
  • 比较的是每一位字符的ASCLL大小,若相等,则往后继续,直至比较到'\0'

C语言心得6(字符函数和字符串函数的使用和刨析)_常用的_04

三、长度受限制的字符串函数介绍

strncpy:

char* strncpy(char* distination,char* source,size_t num)

  • 拷贝num个字符从源字符串到目标空间
  • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标后面追加0,知道num个。

strncat:

char* strncat ( char* destination,const char* source,size_t num );

  • 追加num长度的字符
  • 当源字符串的长度小于num时,只追加源字符串长度的字符到目标地址

strncmp:

int strncmp ( const char* str1,const char* str2,size_t num );

  • 比较到出现字符不一样或者一个字符串结束或者num个字符全部比较完

四、字符串查找

strstr:查找字符串

char* strstr ( const char* string,const char* strCharSet);

  • 在string字符串中查找strCharSet字符串,若找到则返回找到字符串后面的元素,若没找到返回空值

C语言心得6(字符函数和字符串函数的使用和刨析)_字符串函数_05

strtok:(会用就好)

char* strtok ( char* str,const char* sep )

  • sep参数是一个字符串,定义了用作分隔符的字符集合
  • 第一个参数指定一个字符串,它包含了0个或多个由sep字符串中一个或者多个分隔符分割的标记
  • strtok函数找到str中的下一个标记,并将用'\0'进行结尾,返回一个指向这个标记的指针(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改)
  • strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存他在字符串中的位置
  • strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记
  • 如果字符串中不存在更多的标记,则返回NULL指针

五、错误信息报错

strerror:返回错误码,所对应的错误信息

char* strerror ( int errnum );

六、字符操作

字符分类函数:

C语言心得6(字符函数和字符串函数的使用和刨析)_字符串函数_06

字符转换:

C语言心得6(字符函数和字符串函数的使用和刨析)_字符串函数_07

tolower()----大写转小写

toupper()----小写转大写

七、内存操作函数

memcpy:只要处理不重叠的内存拷贝就可以

void* memcpy ( void* dest,const void* src,size_t count);

  • void为了可以返回多种形式的元素
  • count为所需要拷贝的元素的总字节大小

C语言心得6(字符函数和字符串函数的使用和刨析)_常用的_08

C语言心得6(字符函数和字符串函数的使用和刨析)_常用的_09

可以再加上断言!

memmove:处理内存重叠拷贝

void* memmove ( void* dest,const void* src,size_t count);

  • 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的
  • 如果源空间和目标空间出现重叠,就的使用memmove函数处理

C语言心得6(字符函数和字符串函数的使用和刨析)_字符串函数_10

memcmp:

int memcmp ( const void* ptr1,const void* ptr2,size_t num);

  • 比较从ptr1和ptr2指针开始的num个字节

C语言心得6(字符函数和字符串函数的使用和刨析)_字符串函数_11

memset:内存设置

void* memset ( void* dest,int c,size_t count);

C语言心得6(字符函数和字符串函数的使用和刨析)_常用的_12

注意memset函数之更改一个字节长度