2014-09-22 100 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