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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:05:10