strcat实现

sky*_*oor 7 c strcat

我试图自己实现strcat,我发现了像这样的Wiki的strcat实现......但是当我使用它时,存在分段错误.

下面的代码有什么问题?

char *
strcat(char *dest, const char *src)
{
    size_t i,j;
    for (i = 0; dest[i] != '\0'; i++)
        ;
    for (j = 0; src[j] != '\0'; j++)
        dest[i+j] = src[j];
    dest[i+j] = '\0';
    return dest;
}
Run Code Online (Sandbox Code Playgroud)

Pav*_*sky 15

代码没问题.

看起来你的调用代码有问题.

你还记得为目标字符串分配足够的内存吗?

  • +1,可能OP正在使用字符串常量作为目标参数进行调用. (7认同)

unw*_*ind 8

我强烈建议使用指针而不是整数索引,以免出现整数溢出.即使size_t数量与位数相同char *,也可以添加不添加指针的索引.

我想这或多或少是学术性的; 如果你要拨打strcat()多GB的字符串,你可能会遇到各种各样的麻烦.

这是一个基于指针的版本,为了完整性:

char *
my_strcat(char *dest, const char *src)
{
    char *rdest = dest;

    while (*dest)
      dest++;
    while (*dest++ = *src++)
      ;
    return rdest;
}
Run Code Online (Sandbox Code Playgroud)

当然,这确实需要另一个指针的rdest返回值空间,但我认为这是一个很好的权衡.

另请注意,您无法合法定义strcat()普通应用程序代码中调用的函数; 整个命名空间(名称以...开头的公共函数str)保留用于实现.