C语言字符函数和字符串函数

基本字符函数

  • strlen函数
  • strcpy函数
  • strcat函数
  • strcmp函数
  • strncpy函数
  • strncat函数
  • strncmp函数
  • strstr函数
  • strtok函数
  • strerror函数
  • memcpy函数
  • memmove函数
  • memcmp函数

strlen函数:

size_t strlen (const char* str);

函数作用:计算字符串的长度;

注意:

  • 字符串以 '\0' 作为结束标志,strlen只返回 '\0'之前的字符数量;
  • 函数的返回值是size_t,是无符号的;

strcpy函数 

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

函数作用:将源字符串复制到目标指向的数组中,包括终止符;

注意:

  • 源字符串以 '\0' 结尾;
  • 目标空间destination必须足够大且可修改;

strcat函数

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

函数作用:将源字符串source追加到destination,souce内容不改变;

注意:

  • 源字符串以 '\0' 结尾;
  • 目标空间必须足够大且可修改;

 stacmp函数

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

函数作用:注意比较比较字符串str1和字符串str2的内容,如果完全相同返回1,否则返回0;

注意:

  • 第一个字符串大于第二个字符串,则返回大于0的数字;
  • 第一个字符串等于第二个字符串,则返回0;
  • 第一个字符串小于第二个字符串,则返回小于0的数字;

strncpy函数

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

函数作用:将source字符串的前num个字符拷贝到destination,若source没有num个字符,则会将用0补充到num个;

注意:

  • 如果destination有内容,则可能会覆盖;
  • 补充的0在打印时不会显示;
  • 目标空间必须足够大;

strncat函数

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

函数作用:将source字符串的前num个字符追加到destination中;若source没有num个字符,则用 '\0' 追加;

注意:

  • 目标空间destination必须足够大;

 strncmp函数

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

参考strcmp函数;

strstr函数 

char* strstr ( const char* str1 , const char* str2 );

函数作用:在str1找str2第一次出现的位置,并返回第一次出现的指针;如果str1中没有str2则返回NULL指针。

strtok函数

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

函数作用: 将str字符串以sep字符串进行分割;

注意:

  • sep是一个 “符号” 字符串,这里面的符号用来分割str字符串的;
  • strtok函数根据sep中的字符,找到该字符在str字符串中出现的位置并将其换成 '\0' ;
  • strtok函数第一个参数不为NULL时,函数将找到str中的第一个标记,strtok函数并保存它在字符串中的位置;
  • strtok函数第一个参数为NULL时,函数将在同一个字符串中被保存的位置开始,查找下一个标记;
  • 若字符串str不存在sep中的字符,则返回NULL;

如上图,28行中strtok函数的第一个参数不为NULL,strtok函数在ch1中找到第一个标记字符  ' - ' 用 ' \0 ' 替换,并保存该位置;在31行中,strtok函数第一个参数为NULL,strtok将在同一个字符串被保存的位置开始(也就是28行中存储的位置开始),查找下一个标记字符,当sep中的字符找完时,返回NULL。

strerror函数 

char* strerror(int errnum);

函数作用:返回代码中的错误;

memcpy函数

void* memcpy (void* destination , const void* source , size_t num); 

函数作用:将source字符串向后复制num个字符到destination中;

注意:

  • memcpy函数在遇到 "\0" 时不会停止;
  • destination和source的空间内存不能有重叠部分;


如上图,

  • ch2表示sizeof求得长度,ch3表示strlen的长度;sizeof会将 '\0' 计算在总长度内,而strlen不会将 '\0' 计算在长度内。因此在memcpy时,sizeof的方式自带 '\0' 结尾,而strle就没有 '\0' 作为结尾;因此在打印的时候sizeof打印正确,而strlen打印出现越界;
  • 因此在自定义的打印中,memcpy函数不会在新字符串的末尾添加 '\0' ,此时就需要手动添加。

如上图,指定复制位置,将ch1第六个位置开始后的5个字符复制到ch2中,但依然不能忘记手动赋 ' \0 '。

 memmove函数

void* memmove(void* destination , const void * source , size_t num);

函数作用:与memcpy类似,但是memmove函数处理内存重叠部分优于memcpy;

如上图,memmove函数依然要将末尾置为 '\0' ,否则会越界;

如上图,memmove函数可以自己追加自己的字符串内容。

memcpy函数

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

函数作用:比较str1和str2开始的第num个字节,返回值类似strmp。

 

  • 34
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值