我想测试一下我在考试中看到的以下代码:
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;
}