复制字符串会导致SegFault

时间:2019-04-09 20:17:24

标签: c gcc

我想测试一下我在考试中看到的以下代码:

void fct(char *s, const char *t) {
    while(*s++ = *t++);
}

它应该与strcpy()相同,但是当我运行它时,它在第一次评估while条件时导致了分割错误。没有明显的理由为什么会出现段错误,而其他人也找不到原因。

我已经使用gcc 8.3.0和gcc 7.3.0对其进行了编译,结果均相同。我也尝试过使用gdb进行调试,这也没有带来任何澄清。

这是我的测试代码:

void fct(char *s, const char *t) {
    while(*s++ = *t++);
}

int main(int argc, char *argv[]) {
    fct("hello", "world");
    return 0;
}

gcc -Wall -o test test.c一起编译。 当字符串位于变量中时,也会发生同样的情况:

int main(int argc, char *argv[]) {
    char *a = "hello";
    char *b = "world";
    fct(a, b);
    return 0;
}
int main(int argc, char *argv[]) {
    char *a = malloc(sizeof(char)*6);
    char *b = malloc(sizeof(char)*6);
    a = "hello";
    b = "world";
    fct(a, b);
    return 0;
}

0 个答案:

没有答案