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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:03:18