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

C语言编写字符串替换程序时printf输出意外换行如何解决

问题原因

  • 你代码中出现的意外换行是fgets函数的特性导致的:fgets读取输入时会将用户按下回车产生的换行符\n一并存入目标字符串末尾,你读取的str3末尾自带换行符,因此打印str3后会自动换行。
  • 你原代码中strncmp时特意给strlen(str2)减1,本质也是为了跳过str2末尾的换行符,这种处理逻辑不够严谨,也可以同步优化。

修复方案

你只需要在每次fgets读取输入后,手动移除字符串末尾的换行符即可,修改后的完整代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[128], str2[128], str3[128];
    for (int i = 0; i < 128; i++) // 初始化字符串
    {
        str1[i] = 0;
        str2[i] = 0;
        str3[i] = 0;
    }
    printf("Input the first string:");
    fgets(str1, 128, stdin);
    // 移除str1末尾的换行符
    str1[strcspn(str1, "\n")] = '\0';
    printf("Input the second string:");
    fgets(str2, 128, stdin);
    // 移除str2末尾的换行符
    str2[strcspn(str2, "\n")] = '\0';
    printf("Input the third string:");
    fgets(str3, 128, stdin);
    // 移除str3末尾的换行符
    str3[strcspn(str3, "\n")] = '\0';

    if (strncmp(str1, str2, strlen(str2)) == 0) // 无需再手动减1,长度判断更准确
    {
        printf("%s", str3);
        int RemainingChar = strlen(str1) - strlen(str2);
        for (int i = 0; i < RemainingChar; i++)
        {
            printf("%c", str1[i + strlen(str2)]); // 无需再手动减1,偏移量正确
        }
        // 可选:最后添加换行符让输出排版更规范
        putchar('\n');
    }
    return 0;
}

验证效果

输入示例和你测试用的内容一致时,输出结果就是你期望的qwefghjkl。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:09