strcpy实现可能的错误

时间:2013-11-16 01:55:48

标签: c string

我编写了一个字符串副本和连接实现。

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;
}

即使它适用于各种输入,但使用这些片段时可能遇到的明显问题是什么?

1 个答案:

答案 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的信息量不大:我宁愿返回复制字符串的长度或指向复制/连接字符串的指针(最后一个是strcatstrcpy做的)。