在下面的代码中,结果是堆栈溢出。尽管两个字符串都有空字符,但strcpy循环应该终止,因为源字符串具有空字符。为什么发生堆栈溢出?
#include <stdio.h>
#include<strings.h>
int main(void) {
char *str="Hello world";
char *str1="Good morning";
strcpy(str,str1);
printf("%s",str);
return 0;
}
答案 0 :(得分:7)
错误不是堆栈溢出,而是修改字符串文字。
str
是一个指向字符串文字"Hello world"
的指针,修改字符串文字是未定义的行为。
将str
更改为:
char str[100] = "Hello world";