strcat()与strncat()

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. }
  • 1


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. }
  • 1



二、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. }
  • 1
 

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

第一段函数的strncat那里的结果有一点问题。
转自:https://blog.csdn.net/lanzhihui_10086/article/details/39828901#commentBox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值