2014-09-22 71 views
0

在下面的代码中,结果是堆栈溢出。尽管两个字符串都有空字符,所以strcpy循环应该终止,因为源字符串具有空字符。为什么发生堆栈溢出?带指向字符数组的指针的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; 
} 

回答

7

错误不是堆栈溢出,而是修改字符串文字。

str是一个指向字符串字面值"Hello world"的指针,修改字符串文字是未定义的行为。

更改str到:

char str[100] = "Hello world"; 
+0

手段的char * str是默认为const char *海峡?如果是这样,为什么它不会发生在char以外的数组类型中? – Siya 2014-09-22 10:14:37

+0

@Siya阅读[在C中char s \ [\]和char * s有什么区别?](http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s -and炭-S-在-c)的 – 2014-09-22 10:24:06