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

Ubuntu下C语言printf读取文件输入时无法打印变量的问题

C语言printf重定向输入异常问题分析与解决

问题根源:跨平台换行符差异导致字符串终止异常

Windows文本文件的换行符是\r\n,Ubuntu则是\n。你的initialze_names函数读取Windows格式的输入文件时,会把\r保留在字符串末尾。当用printf("%s后续字符", name)输出时,\r会让终端光标跳回行首,后续打印的字符直接覆盖了变量内容,看起来像是printf没输出变量。而puts会自动追加换行并处理\r,键盘输入是Ubuntu本地的\n格式,所以两种场景下都能正常工作。

Ubuntu下的可行解决方案

  • 去除字符串末尾的\r:读取输入后,手动截断\r字符
    #include <string.h>
    // 假设name是读取到的字符串变量
    char *carriage_return = strchr(name, '\r');
    if (carriage_return != NULL) {
        *carriage_return = '\0';
    }
    
  • 转换输入文件格式:用dos2unix工具把Windows格式文本转为Ubuntu兼容格式
    dos2unix your_input_file.txt
    
  • 优化读取逻辑:在读取字符时,直接跳过\r,只保留有效内容
    int c;
    int idx = 0;
    while ((c = getchar()) != EOF && c != '\n') {
        if (c != '\r') { // 跳过\r字符
            name[idx++] = c;
        }
    }
    name[idx] = '\0'; // 确保字符串终止
    

测试验证

修改代码或转换文件后,执行重定向命令测试:

./your_program < your_input_file.txt

此时printf应该能正常输出变量内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:42:38