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

C语言编写员工ID打印程序时printf无输出该如何解决?

代码问题根因

  • 存储ID的变量类型错误:你定义的char n只能存储单个字符,无法容纳完整的ID字符串。使用%s格式符向单个char变量输入内容会直接触发栈缓冲区溢出,属于未定义行为,这才是printf无输出的核心原因,和输出缓冲无关。
  • 动态内存申请逻辑错误:你申请的int* ptr是int类型数组,完全没有被使用,且int类型也不适合存储混合了数字和字母的ID字符串,应该申请char类型的内存空间来存储字符串。
  • 格式符与参数不匹配:printf中%s格式符要求传入字符串首地址(char*类型),你传入单个char类型的n,类型完全不匹配,也会触发未定义行为。

修正后可运行代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m;
    char *id_ptr; // 改为char类型指针,用于存储字符串
    printf("Id number of employee 1:\n");
    printf("Enter your id number length\n");
    scanf("%d", &m);
    printf("%d\n", m);
    // 申请m+1长度的char内存,多留1位存字符串结束符'\0'
    id_ptr = (char*) malloc ((m + 1) * sizeof(char));
    printf("Enter your id number:\n");
    // 直接传入char类型指针作为%s的输入地址
    scanf("%s", id_ptr);

    printf("The id number of employee 1 is %s\n", id_ptr);
    // 释放动态申请的内存,避免内存泄漏
    free(id_ptr);
    return 0;
}

补充说明

如果担心输入长度超过申请的内存空间,可以将scanf("%s", id_ptr)改为scanf("%*s", m, id_ptr)限制最大输入长度,避免溢出问题。

内容的提问来源于stack exchange,提问作者Adrija Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:06:02