strcat实现

我试图自己实现strcat,并且我发现了像这样的str的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; } 

代码没问题。

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

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

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

我猜这或多或少是学术性的; 如果你在多千兆字节的字符串上调用strcat() ,你可能遇到各种各样的麻烦。

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

 char * my_strcat(char *dest, const char *src) { char *rdest = dest; while (*dest) dest++; while (*dest++ = *src++) ; return rdest; } 

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

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

dest需要有足够的内存来容纳此实现中的串联。 在此实现中,它必须由调用者分配。 您还应确保dest和src都以null结尾。 如果dest没有足够的内存,这将覆盖其他内容可能使用的内存。

它与我一起工作正常,我已经检查过了。

  #include "stdio.h" 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; } void main(void) { char a[10]={"abc"}, b[10]={"def"}; strcat(a,b); printf("%s",a); getchar(); } 

为目标字符串分配足够的内存..即至少(源字符串的长度+ 1)。