C语言中使用指针打印字符串出现segmentation fault的原因咨询
问题原因分析
你的代码里有两处关键错误直接导致了段错误:
指针类型不匹配
数组名string本身就是指向数组首元素的指针(类型为char*),而&string是指向整个char[100]数组的指针(类型为char (*)[100])。你把&string赋值给char*类型的pstring,属于错误的类型转换,会彻底打乱指针的语义。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
相关产品推荐
相关产品推荐

