-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