c - 为什么在使用指针时会得到 "bus error"?

标签 c

所以我正在玩指针,因为我不知道还能做什么,通常,我想象每条指令后在幕后发生了什么。但我最近遇到了一个我不太理解的错误。

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/

相关文章:

c - 使用STM8L在UART上接收数据

计算用户输入的单词

c - 使用共享内存将数据结构传递给另一个进程并保存到文件

c - libnet 无法写入 ip 数据包

c - 尝试理解 JNI.h 中的 C 函数调用

c - C 中的 char* 数组

c - 生成 C header 时隐藏 Rust 库的私有(private)字段

c - omap-4460 的 UART4 基址

c - 遍历task_struct的子级

用于传递参数的连续内存