gpt4 book ai didi

c - 使用 fgets 从文件中读取一行

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:59 25 4
gpt4 key购买 nike

本应如此简单的东西却让我感到难过。我所做的只是编写一个 getLine 方法,该方法应将一行读入缓冲区。我从 10 字节 开始为缓冲区分配内存,然后将 fgets 分配到一个 char 数组中。这个想法是我一遍又一遍地尝试,将缓冲区的大小加倍,直到它得到整行。然而,我似乎观察到的是它读取了该行的一部分,然后在下一次尝试中继续在上次尝试时用完空间的地方,所以它给出了该行的最后一部分。任何对错误的洞察,我希望我的 realloc 内存到缓冲区,将不胜感激。

char * mygetline( char **buffer,  FILE * infile )
{
int buffSiz = 10;
*buffer = calloc( buffSiz, 1 );
do
{
char * result = fgets(*buffer, sizeof *buffer ,infile);
if(result == NULL)
{
free(buffer);
return NULL;
}

if(strchr(*buffer, '\n'))
return *buffer;
else
{
char *newBuf;
buffSiz = buffSiz*2;
newBuf = realloc(NULL, buffSiz);
char *buffer = newBuf;
printf("%d", buffSiz);
printf("%s", *buffer);
}
} while (1); // INFINITE LOOP - WE ONLY GET OUT BY RETURNING FROM WITHIN

最佳答案

存在多个缺陷:

  • sizeof *buffer不做你想做的事,因为它是一个指针。你应该使用 buffSiz相反

  • char *buffer = newBuf;您正在将新内存分配给局部变量,即当 else 时消失的变量已退出

  • 您没有将缓冲区传递给 realloc , 你总是传递 NULL

  • 您没有检查 realloc 的返回值

作为无耻的 self 推销,here's a function I posted in another answer .

关于c - 使用 fgets 从文件中读取一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641851/

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