当前位置:   article > 正文

字符串函数---strcat()与strncat详解及实现_strncat sizeof

strncat sizeof

一、strcat()与strncat()

     strcat():strcat(dest,src);        strcat把src所指向的字符添加到dest结尾处(覆盖原dest结尾处的'\0'),并添加新的'\0'。


     说明:src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。


     strncat():strncat(dest,src,n);      strncat把速溶茶所指向的字符的前n个字符添加到dest结尾处(覆盖原dest结尾处的'\0'),并添加新的'\0'。


     说明:src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的前n个字符串,返回指向dest的指针。


1.具体实例:

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. int main()
  5. {
  6. //以下strcat
  7. char a[30]="lanzhihui is ";
  8. char b[]="a good boy!";
  9. strcat(a,b); //如果数组a的剩余存储空间不足以存放数组b,则出错。
  10. //数组a中字符串的成为连接后的字符串
  11. cout<<"strcat(a,b):"<<a<<endl;
  12. //以下strncat
  13. char c[30]="Hello ";
  14. char d[]="world!";
  15. strncat(c,d,sizeof(d)-1);
  16. cout<<"strncat(c,d):"<<c<<endl;
  17. strncat(c,d,30); //只要是c中空间足够大,可以存储d中的字符串,n为任何值都可以(实际上连接是按照d数组中的字符个数计算的)
  18. cout<<"strncat(c,d):"<<c<<endl;
  19. system("pause");
  20. return 0;
  21. }


2.以'\0'结束读取、连接

  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. int main()
  5. {
  6. char a[100]="lanzhi\0hui is ";
  7. char b[]="a good \0boy!";
  8. strcat(a,b);//连接以'\0'结束,即数组a以'\0'停止,数组b以'\0'停止
  9. cout<<a<<endl;
  10. system("pause");
  11. return 0;
  12. }



二、strcat()与strncat()的具体实现 

  1. #include<iostream>
  2. #include<assert.h>
  3. using namespace std;
  4. char *strcat_m(char *dest,const char *str)
  5. {
  6. assert((dest!=NULL)&&(str!=NULL));
  7. char *cp=dest;
  8. while(*cp!='\0') ++cp;
  9. while((*cp++=*str++)!='\0')
  10. {
  11. //
  12. }
  13. return dest;
  14. }
  15. char *strncat_m(char *dest,const char *str,int n)
  16. {
  17. assert((dest!=NULL)&&(str!=NULL));
  18. char *cp=dest;
  19. while(*cp!='\0') ++cp;
  20. while(n&&(*cp++=*str++)!='\0')
  21. {
  22. --n;
  23. }
  24. return dest;
  25. }
  26. int main()
  27. {
  28. //以下strcat
  29. char a[30]="lanzhihui is ";
  30. char b[]="a good boy!";
  31. strcat_m(a,b);
  32. cout<<"strcat(a,b):"<<a<<endl;
  33. //以下strncat
  34. char c[30]="Hello ";
  35. char d[]="world!";
  36. strncat_m(c,d,sizeof(d)-1);
  37. cout<<"strncat(c,d):"<<c<<endl;
  38. strncat_m(c,d,30);
  39. cout<<"strncat(c,d):"<<c<<endl;
  40. system("pause");
  41. return 0;
  42. }
 

与调用原函数结果一样,strcat_m()与strncat_m()函数功能实现。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/713586
推荐阅读
相关标签
  

闽ICP备14008679号