向malloc分配的指针输入内容后无法正常打印问题排查
问题原因及修复方案
你的代码无法正确打印内容的核心问题出在main函数的printf调用上:
printf("%s", *file);
格式符%s要求传入字符串的首地址(也就是char*类型),但*file是对指针解引用,得到的是字符串的第一个字符(char类型),类型不匹配触发了未定义行为,所以无法正常输出内容。
除此之外,你的代码还有几个需要优化的地方:
- 没有检查
malloc的返回值:如果内存分配失败,malloc会返回NULL,后续的scanf操作会直接崩溃 scanf("%s")存在缓冲区溢出风险:如果输入的字符串长度超过511字节(你分配了512字节,要留1字节给字符串终止符\0),会越界写入,破坏内存- 没有释放动态分配的内存:程序结束前未调用
free,会造成内存泄漏
修复后的代码如下:
#include <stdio.h> #include <stdlib.h> char *askFile() { printf("Enter a file: "); // 分配内存并检查是否成功 char *file = malloc(512 * sizeof(char)); if (file == NULL) { fprintf(stderr, "Memory allocation failed\n"); exit(EXIT_FAILURE); } // 限制输入长度为511,避免缓冲区溢出 scanf("%511s", file); return file; } int main() { char *file = askFile(); // 直接传入指针,符合%s的参数要求 printf("%s\n", file); // 释放动态分配的内存 free(file); return 0; }
内容的提问来源于stack exchange,提问作者user20598969
相关产品推荐
相关产品推荐

