-2
這是可行的,並按照我的預期生產bbcd
。爲什麼在字符串中爲字符分配總線錯誤?
#include <stdio.h>
int main(void) {
char string[] = "abcd";
string[0] = string[1];
printf("%s\n", string);
}
這是一個總線錯誤。
#include <stdio.h>
int main(void) {
char *string = "abcd";
string[0] = string[1];
printf("%s\n", string);
}
爲什麼?
Valgrind的說:
==9909== Process terminating with default action of signal 10 (SIGBUS)
==9909== Non-existent physical address at address 0x100000FA2
==9909== at 0x100000F65: main (test.c:6)
'abcd'是一個常數。你可以用'char string [5] =「abcd」;'來代替。 – 4386427
請在提問之前使用搜索。 – 2501
'char string [] =「abcd」;'聲明一個數組並用'{'a','b','c','d','\ 0'}'初始化它。 'char * string =「abcd」;'聲明一個指向'char'的指針,並用一個指向**常量字符串**'「abcd」'開始的指針來初始化它。您可以更改您聲明的數組,但修改常量字符串會導致未定義的行爲。 – 2016-11-04 07:49:18