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
相关产品推荐
相关产品推荐

