我编写了一个字符串副本和连接实现。
int mycopy(char *a,char *b)
{
for(int i=0;b[i]!='\0';i++)
{
a[i]=b[i];
}
b[i]='\0';
return 0;
}
int concat(char *b,char *c)
{
int i=0,j=0;
for(i=0;b[i]!='\0';i++);
for(j=0;c[j]!='\0';j++)
{
b[j+i]=c[j];
}
b[j+i]='\0';
return 0;
}
即使它适用于各种输入,但使用这些片段时可能遇到的明显问题是什么?
答案 0 :(得分:3)
你的mycopy似乎有一个错误:它遍历b直到它找到\ 0并将内容复制到a,但最后,它将\ 0添加到b而不是a,所以它留下非零 - 终止。
除此之外,如果你使用b指向非零终止字符串来调用此函数(例如,如果b在调用之前未初始化),它将崩溃。如果a没有分配足够的内存(至少strlen(b),因为你没有添加\ 0到它:))它也会崩溃来保存b的内容。
concat有类似的问题:如果b或c不指向以零结尾的字符串,或者如果b没有指向长度至少为strlen(c)+ strlen(b)+1的内存块,则会崩溃。
另外,返回0的信息量不大:我宁愿返回复制字符串的长度或指向复制/连接字符串的指针(最后一个是strcat和strcpy做的)。