Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么将字符串中的字符分配给自身是一个总线错误?_C - Fatal编程技术网

C 为什么将字符串中的字符分配给自身是一个总线错误?

C 为什么将字符串中的字符分配给自身是一个总线错误?,c,C,正如我所期望的那样,它可以工作并生成bbcd #include <stdio.h> int main(void) { char string[] = "abcd"; string[0] = string[1]; printf("%s\n", string); } 因为在第二种情况下,您试图修改调用的 详细说明一下,在第二种情况下,string[0]是字符串文本的第一个元素,对该元素的任何赋值都是试图修改该元素所持有的值 引用第§6.4.5章“字符串文字

正如我所期望的那样,它可以工作并生成
bbcd

#include <stdio.h>

int main(void) {
    char string[] = "abcd";

    string[0] = string[1];

    printf("%s\n", string);
}

因为在第二种情况下,您试图修改调用的

详细说明一下,在第二种情况下,
string[0]
是字符串文本的第一个元素,对该元素的任何赋值都是试图修改该元素所持有的值

引用第§6.4.5章“字符串文字”

[…]如果程序试图修改这样的数组,则该行为为 未定义


abcd
是一个常数。你可以做
charstring[5]=“abcd”charstring[]=“abcd”
声明一个数组并用
{a',b',c',d','\0'}
初始化它<代码>字符*string=“abcd”
声明指向
字符的指针
,并使用指向常量字符串开头的指针对其进行初始化
“abcd”
。您可以更改声明的数组,但修改常量字符串会导致未定义的行为。@2501会出现许多不相关的情况。谢谢你指出dup。@Paul Rooney你能给你的评论提供一些参考吗?
#include <stdio.h>

int main(void) {
    char *string = "abcd";

    string[0] = string[1];

    printf("%s\n", string);
}
==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)