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

char类型可当作int类型使用吗?为何下述代码触发段错误?

问题分析与修复:scanf触发的段错误

这段代码的核心问题是scanf格式符与参数类型不匹配:

  • %d格式符要求传入int*类型指针,用于存储读取的整数(通常占4字节)。
  • 你声明的num是char类型,&num是char*类型,仅指向1字节的内存空间。scanf用%d时会尝试往该地址写入完整的int数据,直接越界覆盖相邻内存,最终触发段错误。

虽然char属于整型家族,但它的内存大小和int不同,不能直接混用scanf的%d格式符。

修复方案

有两种可行的修复方式:

  1. 将变量类型改为int,匹配%d格式符:
#include <stdio.h>
int main()
{
    int num;
    scanf("%d", &num);
    printf("%d", num);
}
  1. 保留char类型,使用对应格式符%hhd(仅写入1字节数据):
#include <stdio.h>
int main()
{
    char num;
    scanf("%hhd", &num);
    printf("%d", num);
}

⚠️ 注意:第二种方案中,输入的数字不能超出char的取值范围(通常是-128到127),否则会引发数值溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:59:52