c语言笔记 字串串函数---strcat,strncat,strcpy,strncpy

打印 上一主题 下一主题

主题 940|帖子 940|积分 2820

目录

函数strcat
注意
那么们要怎么防止这种越界的情况呢?
函数strncat
注意
函数strcpy 和 函数strncpy
注意


函数strcat

   

  • 功能:将两个字符串拼接起来,strcat(char *dest,const char *str)
  • 头文件:#include
  • 返回值:返回一个拼接好字符串的指针 -----等价于dest 数组名代表首元素地址 也可以别的顶一个指针去接收
  1. dest:指向的目标内存,拼接好的字符串最后存储的地方
  2. str:需要拼接的字符串,在dest后面拼接上去
  3. strcat(数组名,字符串)
复制代码
注意

     

  • strcat函数是不限制拼接字符的大小,所以可能会出现超过最大范围的情况
   那么们要怎么防止这种越界的情况呢?

           strcat函数没法系统自动的帮我计算越界情况,只能人工的去计算,尚有一种更加安全且不会越界的函数
   函数strncat

      

  • 功能:将两个字符串凭借起来
  • strncat(char *dest,const char *str,n)
  • strncat(char dest[],const *str .n)
  • 头文件#include
  • 返回值:返回拼接好字符串的指针,等价于数组名dest
   
  1. dest:指向目标的内存,最终存储拼好的字符串
  2. str:需要拼接的字符串
  3. n:可以拼接最多str字符串中多少个字符进去目标内存 通常是 sizeof(dest)-strlen(str)-1
  4. sizeof(dest)-strlen(str)-1   这里的-1是为了给结束标识\0留一个位置
  5. strncat(数组名,字符串,需要拼接的个数)
复制代码
   注意

    strncat函数最多可以拼接n+1个字符,+1是为其留下结束标志\0;n是str中代表多少个字符进去拼接。
    代码运用:
   
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char s[15] = "abc";
  6.     char x[15] = "abc";
  7.     // strcat(s,"ooopppqqq");  //会返回一个指针 我们可以用一个char指针来存 也可以不用
  8.     char *p = strcat(s, "ooopppqqq");
  9.     printf("%s\n", s);
  10.     printf("%s\n", p);
  11.     char *q = strncat(x, "asaadfffadfghjklqerer",sizeof(x)-strlen(x)-1);
  12.     printf("%s\n",q);
  13.     printf("%s\n",x);
  14.     return 0;
  15. }
复制代码
   函数strcpy 和 函数strncpy

         

  • 功能:都是将一个字符串拷贝到一个数组中
  • 函数strncpy相比于strcpy更加的安全。 保举使用strncpy
  • 头文件 #include
  • strcpy(char *dest,char *str) <==> strcpy(char dest[],char *str) <==> strcpy(数组名,字符串)
  • strncpy(char *dest,char *str,n) <==> strncpy(char dest[],char *str,n) <==> strcpy(数组名,字符串,复制的个数)
  • dest是数组名,首元素的地址
  • str一个指针字符串的指针,代表字符串的地址
        注意

         

  • strcpy和strncpy两个函数都会把原先的数组内里的元素覆盖掉
  • strncpy()可以复制n+1个字符到数组dest中,最后一个字符是结束符\0,如果字符串最后没有结束标志\0,那么就不是一个正当的字符串,可能让程序报错。
     
代码运用:

   
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char s[6] = "abc";
  6.     char x[6] = "def";
  7.     char ss[] = "hello";
  8.     char *p = strcpy(s, ss);
  9.     printf("%s\n", s); // 会把abc覆盖掉
  10.     printf("%s\n", p);
  11.     strncpy(x, ss, sizeof(x) - 1);
  12.     printf("%s\n", x);//会把def覆盖掉
  13.     return 0;
  14. }
复制代码
    总结:strncpy函数中-1是为了让最后一位是结束标识符,让其是一个正当的字符串 strncpy最多可以放n+1个字符,n是实际复制过去的字符个数 +1是给结束标识留一个位置 例如 strncpy(x,ss,5); x是有六个位置的,我们要留一个位置出来 所以strncp最多可复制5+1个

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表