C程序输出不符合预期且尝试解决时出现Segmentation Error求助
C语言字符串输出问题解决
问题原因
- 你声明的
first_name是单个char类型变量,仅能存储一个字符,输入多字符时只会保留第一个字符。 scanf("%c", &first_name)仅读取输入的第一个字符,因此输出仅显示"a"。- 你提到的Segmentation Error,当前给出的代码不会触发,但如果之前错误使用未初始化的字符指针(如
char *first_name;)直接写入,会因指针未指向有效内存导致段错误。
修改方案
要存储并输出完整字符串,需要使用字符数组或分配内存的字符指针:
方案1:使用字符数组(推荐,简单安全)
#include <stdio.h> int main(void){ char first_name[100]; // 定义足够长度的字符数组存储字符串 printf("Enter your name: \n"); scanf("%99s", first_name); // 限制读取长度为99,避免缓冲区溢出 printf("Hello, %s", first_name); }
方案2:使用动态分配内存的字符指针
#include <stdio.h> #include <stdlib.h> int main(void){ char *first_name = malloc(100 * sizeof(char)); // 分配内存 if (first_name == NULL) { // 检查内存分配是否成功 printf("Memory allocation failed\n"); return 1; } printf("Enter your name: \n"); scanf("%99s", first_name); printf("Hello, %s", first_name); free(first_name); // 释放内存 return 0; }
说明
%s是字符串格式符,用于读取和输出完整字符串。- 使用
scanf("%99s", ...)限制读取长度,防止输入过长导致缓冲区溢出,提升程序安全性。
内容的提问来源于stack exchange,提问作者Kishin C
相关产品推荐
相关产品推荐

