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

VS Code下C语言程序输入名称却输出异常奇怪字符的问题

异常输出的产生原因

你当前代码存在两处核心的格式符与参数类型错配问题,直接触发C语言的未定义行为,最终输出乱码:

  • 第一处错配在printf环节:%c格式符要求传入一个int宽度的字符值(C语言可变参数规则下,传入的char类型会自动提升为int),但你实际传入的是Name——也就是char数组的首地址,这是一个64位宽度的指针数值。printf不会读取你存在数组里的输入内容,而是直接把这个指针值的最低有效字节转换为字符输出。刚好这个字节对应的扩展ASCII编码就是É,这个输出结果和你输入的Amir完全没有关系。
  • 第二处错配在scanf环节:%c是专门用来读取单个字符的格式符,根本不支持接收连续的姓名字符串。同时你用&Name作为输入参数,虽然这个地址的数值和数组首元素地址碰巧一致,但格式符和传入参数的类型不匹配,本身就属于未定义行为,既没法完整接收用户输入的Amir字符串,也可能造成写入越界的问题。
代码修正方案

要实现“输入姓名、原样输出”的功能,需要把读写逻辑调整为匹配字符串的格式规则,具体调整点:

  • 输入环节把%c替换为匹配字符串的%s,同时去掉不必要的&取址——因为数组名本身就代表字符串的首地址,不需要额外取址。为了避免输入过长造成栈溢出,可以给格式符加宽度限制,设置为%63s,最多读取63个字符,预留1个字节存放字符串必须的结束符\0。
  • 输出环节把%c替换为匹配字符串的%s,传入数组名即可输出完整的字符串内容。

修正后的可运行代码示例:

#include<stdio.h>
int main()
{
    char Name[64];
    printf("Enter first name: ");
    scanf("%63s", Name);
    printf("%s", Name);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 07:06:04