我试图自己实现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)
我强烈建议使用指针而不是整数索引,以免出现整数溢出.即使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)保留用于实现.