指针和字符串的分段错误

时间:2014-04-19 04:02:02

标签: c string pointers segmentation-fault

我正在编写C函数strcat的指针版本。它将字符串t复制到s的末尾。这是我的解决方案:

/* strcat: a pointer version of the strcat (copy string t to the end of s) */
void strcat (char *s, char *t)
{
    while (*s++ != '\0')    /* find the end of s */
        ;

    while (*s++ = *t++)
    ;
}

我运行它并且崩溃了 - Code Blocks调试器将其称为分段错误,并且该部分功能导致了崩溃:

while (*s++ = *t++)

我做错了什么?

1 个答案:

答案 0 :(得分:1)

这是固定版本和测试程序:

#include <stdio.h>

void strcat (char *s, char *t)
{
    while (*s++) 
        ;

    s--;

    while (*s++ = *t++)
        ;
}

int
main(void)
{
    char str1[100] = "abc";
    char *str2 = "def";
    strcat(str1, str2);
    printf("%s\n", str1);
    return 0;
}

如果您按以下方式拨打strcat()

char *str1 = "abc";
char *str2 = "def";
strcat(str1, str2);
那么你的程序可能会崩溃,因为编译器通常会将字符串文字放在只读内存区域,尝试写入这些地方会导致段错误。