所以我正在玩指针,因为我不知道还能做什么,通常,我想象每条指令后在幕后发生了什么。但我最近遇到了一个我不太理解的错误。
char *str = "test";
printf("%c", ++*str);
输出:
zsh: bus error
预期输出是“u”,因为据我所知,它首先取消引用变量“str”的首地址(它是“t”),而不是递增它,对吗?或者我错过了什么?
像这样更改代码不会给我任何错误,但为什么?
printf("%c", *++str);
谢谢!
最佳答案
您无法修改字符串文字中的数据。如果您这样做,您所期望的将会起作用:
char buf[] = "test";
char *str = buf;
putchar(++*str);
因为buf
的内容是可写的。
关于c - 为什么在使用指针时会得到 "bus error"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68849185/