C语言代码中my_print_2打印语句为何无内容输出
C语言函数无返回值导致打印语句无输出问题
问题描述
程序在main函数中读取用户输入的字符串,随后调用isComplicated函数(当前仅展示该函数的开头实现)。第一个打印语句my_print_1运行正常,可正确打印读取到的字符串,但第二个打印语句my_print_2无任何输出。
问题涉及代码如下:
bool isComplicated(char *str) { int length = 0; printf("my_print_2 %s \n", str); } ///////////////////////////// int main() { char str[N] = { 0 }; printf("Please enter your string and a non-negative integer...\n"); if (scanf("%s%d", str, &k) != 2 || k < 0) exit(1); printf("my_print_1 %s \n", str); if (isComplicated(str)) printf("Complicated \n"); return 0; }
故障原因
核心问题是isComplicated函数声明返回值类型为bool,但实现中没有写任何return语句返回值,触发未定义行为:
- 函数执行完
printf后直接运行到函数结尾,不会按调用约定给主调函数返回合法的bool值 - 主函数中
if (isComplicated(str))会读取栈上残留的垃圾值作为判断条件,大概率会导致程序流程异常、甚至直接崩溃 my_print_2的内容写入标准输出缓冲区后还没来得及刷新到终端,程序就异常终止,因此看不到输出;而my_print_1执行后程序还能继续运行到函数调用步骤,缓冲区内容有机会被刷新,因此可以正常显示
修复方案
给isComplicated函数补充符合类型要求的返回值即可,比如测试阶段可以在printf语句后添加return true;或return false;,保证函数按约定返回合法值,就能消除这类未定义行为导致的异常。
内容的提问来源于stack exchange,提问作者ERN
相关产品推荐
相关产品推荐

