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

C语言中使用指针打印字符串出现segmentation fault的原因咨询

问题原因分析

你的代码里有两处关键错误直接导致了段错误:

  1. 指针类型不匹配
    数组名string本身就是指向数组首元素的指针(类型为char*),而&string是指向整个char[100]数组的指针(类型为char (*)[100])。你把&string赋值给char*类型的pstring,属于错误的类型转换,会彻底打乱指针的语义。

  2. printf参数使用错误
    printf的%s格式符要求传入char*类型的指针(指向字符串首地址)。但你写的*pstring,在错误的类型赋值后,实际是把数组首元素的字符值当成内存地址去访问——比如输入的第一个字符是'a'(ASCII值97),printf会尝试访问地址0x61的内存,这属于非法内存访问,直接触发段错误。

修正后的代码

只需要把指针定义和printf参数修正即可:

#include <stdio.h>
int main(void)
{
    char string[100];
    printf("Enter a string: ");
    scanf("%s", string);
    // 直接用数组名赋值,等价于取首元素地址&string[0]
    char *pstring = string;
    printf("The value of the pointer is: %s", pstring);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:25:25