c - char * 上的段错误++运算符

标签 c segmentation-fault

<分区>

Possible Duplicate:
Why does this Seg Fault?

在 char * 上使用++ 运算符时收到段错误

#include<stdio.h>

int main()
{
    char *s = "hello";
    printf("%c ", ++(*s));
    return 0;
}

但如果我执行以下操作:

#include<stdio.h>

int main()
{
    char *s = "hello";
    char c = *s;
    printf("%c ", ++c);
    return 0;
}

然后代码完美编译,请问上面的代码有什么问题?

最佳答案

第一个代码片段试图将字符串文字中的字符修改为:

++(*s)

正在尝试递增 s 中的第一个字符。字符串文字(通常)是只读的,尝试修改将导致段错误(C 标准声明如果程序尝试修改此类数组,则行为未定义。)。 p>

第二个片段是修改一个 char 变量,它不是只读的:

char c = *s;

cs 中第一个字符的副本c 可以安全递增。

关于c - char * 上的段错误++运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897378/

相关文章:

c - SIGSEGV 在 memalign 中运行 efence

c - 避免包含浮点类型的结构的假定范围?

c - 无法使用 toupper 将值从小写转换为大写

c - 如何使用和构建一个 makefile 来将 scip 链接到 C?

c - C 中的段错误(核心转储)(使用 GMP 库)

c - 关于段错误

c - 解析读入文件并存储在b树中

C - malloc 和结构、段错误

调用由 void* 指针指向的函数

c - 段错误错误?