在C中将string2追加到string1会引发分段错误[已关闭]

xmd2e60i  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(90)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
11天前关闭。
Improve this question
我正在尝试用C语言重现strlcat的行为,编写我自己的函数。
我需要将string1追加到string2的末尾。
我开始循环遍历string1,直到它找到一个'\0',然后我试着从那里把string2写到string1。但是我认为这不是这样做的方法,因为它会抛出一些分段错误,也许我正在访问内存,或者我不应该(?)。
第一个

0md85ypi

0md85ypi1#

1.使用正确的大小类型(size_t)

  1. size要有任何意义,应指示dst数组长度
    1.如果dst不可修改(例如const数组),则不能调用此函数
    1.当你把函数定义为返回某个东西时--返回它。
    1.如果数组不够大,无法容纳两个字符串,则函数不为null,终止字符串
char *ft_srlcat(char *dst, char *src, size_t size)
{
    char *wrk = size ? dst : NULL;
    if(dst && src)
    {
        while (*dst && size) {dst++; size--;}            
        while (size > 1 && (*dst++ = *src++)) size--;
        if(!size && !*dst) *dst = 0;
    }
    return wrk;
}

int main(void)
{
    char dest[15] = "Hello world.";
    char dest2[5] = "Hello world.";
    char dest1[128] = "Hello world.";
    char dest3[0] = "Hello world.";

    printf("`%s`\n", ft_srlcat(dest, "Goodbye", sizeof(dest)));
    printf("`%s`\n", ft_srlcat(dest2, "Goodbye", sizeof(dest2)));
    printf("`%s`\n", ft_srlcat(dest1, "Goodbye", sizeof(dest1)));
    printf("`%s`\n", ft_srlcat(dest3, "Goodbye", sizeof(dest3)) ? dest3 : "NULL");
    printf("`%s`\n", ft_srlcat(dest1, NULL, sizeof(dest3)) ? dest3 : "NULL");
    printf("`%s`\n", ft_srlcat(NULL, "Goodbye", sizeof(dest3)) ? dest3 : "NULL");
    printf("`%s`\n", ft_srlcat("Hello world.", "Goodbye", sizeof("Hello world.")));
}

https://godbolt.org/z/6xGafsjjo

相关问题