You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C程序中字符串指针操作引发Segmentation fault问题求助

问题分析与解决

你的代码触发段错误的核心原因是:char *p = "exs"; 中的 "exs" 是字符串字面量,这类数据会被编译器放在程序的只读内存区域。当你执行(*p)++时,本质是尝试修改这块只读内存里的字符,这属于未定义行为,直接引发了段错误。

要实现合法的修改操作,需要把字符串放到可写的内存区域,比如改用字符数组存储:

#include<stdio.h>

int main(){
    char arr[] = "exs"; // 字符串字面量被复制到栈上的可写数组中
    char *p = arr;
    char x;
    x = (*p)++; // 现在修改的是栈上的可写内存,操作合法
    printf("%c\n",x);
    return(0);
}

另外需要注意:你原本预期输出'f',但(*p)++是后置自增运算符,它会先把当前*p的值('e')赋值给x,再对*p进行自增操作。如果想让x直接得到自增后的'f',需要改用前置自增:x = ++(*p);

内容的提问来源于stack exchange,提问作者user3473103

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:02:04