char *strcat( char *strDestination, const char *strSource ); 此函数的功能是,把strSource的字符串 放在strDestination后面,并且覆盖strDestination的\0字符串
在网上搜索了好多的实现方法,主要的有以下几种。
1.
#include "stdio.h"
char *strcat(char *str1,char * str2)
{
if((str1 == NULL) || (str2 == NULL)) throw("Invalide arguments");
char * pt = str1;
while(*str1 != '\0') str1++;
while(*str2 != '\0') *str1++ = *str2++;
*str1 = '\0';
return pt;
}
void main()
{
char a[] = "markyuan";
char b[] = "yyyyyy";
char *cat = strcat(a,b);
printf("%s\n",cat);
}
看完这段代码之后感觉一定是有错误的,首先 如果把一个字符串添加到另一个字符串中,执行相关函数之后,怎么能让参数str1改变呢。这是不希望看到的。
还有 while(*str2 != '\0') *str1++ = *str2++; 这一句。不停地在str1后面增加数据,当str2非常大的时候,超过了str1字符串数组的范围,造成越界,这不就会污染其他的变量,对本程序有害嘛。
所以上述代码问题多多。
2.列举出书上的代码
{
register char *p = s1;
while(*p)
++p;
while(*p++ = *s2++)
;
return s1;
}