gpt4 book ai didi

c - fgets() 和文本文件

转载 作者:行者123 更新时间:2023-11-30 20:52:35 26 4
gpt4 key购买 nike

我的书提到fgets将读取直到遇到第 (n-1) 个字符或新行的字符。换行符只是指 Enter (\n) 吗?我问这个问题是因为我所做的是创建一个文本文件,在其中开始输入一些无意义的内容,超出了每行的字符限制,这意味着我使用了不止一行。之后我用了fgets我期望它只读取文本文件第一行中的字符,但它所做的是读取所有字符。

#include <stdio.h>
#include <stdlib.h>

int main()
{
char box[5000];
FILE *fp;

fp = fopen("test.txt", "r");
fgets(box, 5000, fp);
puts(box);
}

Test.txt(文本是随机的,这就是为什么它很愚蠢)(285 个字符):

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk25kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkggggggggggiiiiiiiiiiiiiiiiiiii

所以我期望的结果是它只打印部分文本,并且实际上与为一行设置的限制一样多的字符减去一(我认为是超过 250 个)。但它不是这样,而是打印所有这些。注意:即使我在文件中输入更多字符,也会发生同样的情况。

最佳答案

您似乎假设文本文件中的行长度有上限,也许是 255 个字符。 C 没有施加这样的限制,除非间接使用 int 作为 fgets 的大小参数。

您的程序定义了一个 5000 个字符的数组,并使用长度参数 5000 调用 fgets。这意味着它可以读取最多 5000 个字符的单行(或接近这个字符;我忽略 '\n''\0' 字符的几个差一问题)。您问题中的输入行只有 285 个字符长,因此您的程序可以轻松地将其作为单行读取。

您可以尝试更改数组的长度,看看当输入行太长而无法容纳时会发生什么:

char box[255];
...
fgets(box, sizeof box, fp);

请注意,使用 sizeof box 而不是重复数字意味着调用不会与数组大小不同步。

关于c - fgets() 和文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59888178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com