原文出处:http://blog.csdn.net/lanzhihui_10086/article/details/39828901
一、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.具体实例:
- #include<iostream>
- #include<string>
-
- using namespace std;
-
- int main()
- {
-
- char a[30]="lanzhihui is ";
-
- char b[]="a good boy!";
-
- strcat(a,b);
-
-
- cout<<"strcat(a,b):"<<a<<endl;
-
-
-
- char c[30]="Hello ";
- char d[]="world!";
- strncat(c,d,sizeof(d)-1);
-
- cout<<"strncat(c,d):"<<c<<endl;
-
- strncat(c,d,30);
-
- cout<<"strncat(c,d):"<<c<<endl;
-
- system("pause");
- return 0;
- }
2.以'\0'结束读取、连接
- #include<iostream>
- #include<string>
-
- using namespace std;
-
- int main()
- {
- char a[100]="lanzhi\0hui is ";
-
- char b[]="a good \0boy!";
-
- strcat(a,b);
-
- cout<<a<<endl;
-
- system("pause");
- return 0;
- }
二、strcat()与strncat()的具体实现
- #include<iostream>
- #include<assert.h>
-
- using namespace std;
-
- char *strcat_m(char *dest,const char *str)
- {
- assert((dest!=NULL)&&(str!=NULL));
- char *cp=dest;
-
- while(*cp!='\0') ++cp;
-
- while((*cp++=*str++)!='\0')
- {
-
- }
-
- return dest;
- }
-
- char *strncat_m(char *dest,const char *str,int n)
- {
- assert((dest!=NULL)&&(str!=NULL));
- char *cp=dest;
-
- while(*cp!='\0') ++cp;
-
- while(n&&(*cp++=*str++)!='\0')
- {
- --n;
- }
-
- return dest;
- }
-
- int main()
- {
-
- char a[30]="lanzhihui is ";
-
- char b[]="a good boy!";
-
- strcat_m(a,b);
-
- cout<<"strcat(a,b):"<<a<<endl;
-
-
-
- char c[30]="Hello ";
- char d[]="world!";
- strncat_m(c,d,sizeof(d)-1);
-
- cout<<"strncat(c,d):"<<c<<endl;
-
- strncat_m(c,d,30);
-
- cout<<"strncat(c,d):"<<c<<endl;
-
- system("pause");
- return 0;
- }
与调用原函数结果一样,strcat_m()与strncat_m()函数功能实现。