首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcat实现

strcat实现
EN

Stack Overflow用户
提问于 2010-03-22 04:19:38
回答 5查看 51.7K关注 0票数 7

我试着自己实现strcat,在使用时发现像this......but这样的Wiki的strcat实现,有分段错误。

下面的代码有什么问题?

代码语言:javascript
复制
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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-22 04:21:48

代码没问题。

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

您是否记得为目标字符串分配足够的内存?

票数 15
EN

Stack Overflow用户

发布于 2010-03-22 15:52:55

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

我猜这或多或少是学术上的问题;如果您正在对数or的字符串调用strcat(),那么您可能会遇到各种麻烦。

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

代码语言:javascript
复制
char *
my_strcat(char *dest, const char *src)
{
    char *rdest = dest;

    while (*dest)
      dest++;
    while (*dest++ = *src++)
      ;
    return rdest;
}

当然,对于rdest返回值,这确实占用了另一个指针的空间,但我认为这是一个很好的权衡。

还要注意,您不能在普通应用程序代码中合法地定义一个名为strcat()的函数;整个名称空间(名称以str开头的公共函数)都是为实现保留的。

票数 9
EN

Stack Overflow用户

发布于 2010-03-22 04:25:35

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2488563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档