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

C语言使用fgets实现256字符输入截断功能运行结果不符合预期如何修复

异常产生原因
  • fgets读取时最多只会读取参数指定长度减1的字符,你传入长度为256,因此单次最多读取255个字符到string数组,末尾自动补\0。当输入的字符串总长度超过255个字符时,第一次调用fgets只会读取前255个字符,此时string末尾没有换行符\n。
  • 你写的do-while循环逻辑为:只要string末尾不是\n,就重新调用fgets读取输入,新读取的内容会直接覆盖string中原有的内容。因此输入超长时,循环会反复读取剩余的输入内容、不断覆盖string,直到读到带有\n的最后一段输入为止,最终输出的自然就是输入的末尾部分,而非你预期的前256字符。
修复方案

如果你需要保留读取到的前255个字符,同时清空输入缓冲区中剩余的内容,避免影响后续的输入操作,可修改为如下逻辑:

#include<stdio.h>
#include<string.h>
int main(){
    printf("\nEnter a new string.\n");
    char string[256];
    // 第一次读取输入
    fgets(string, 256, stdin);
    // 判断是否没有读到换行符(说明还有剩余内容在缓冲区)
    if (strlen(string) > 0 && string[strlen(string) - 1] != '\n') {
        // 循环读取并丢弃缓冲区剩余内容,直到读到换行或者缓冲区为空
        int c;
        while ((c = getchar()) != '\n' && c != EOF);
    }
    printf("\n\n stringa %s\n", string);
    return 0;
}

如果你的需求是允许用户输入多行,只保留最后一行的前255个字符,可调整循环逻辑,每次读取新内容前先判断是否需要保留之前的内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:03