gpt4 book ai didi

c - 从文本文件中读取未知长度的字符串并打印它们

转载 作者:行者123 更新时间:2023-11-30 17:30:55 24 4
gpt4 key购买 nike

我有一个问题,当程序遇到“\n”时,如何从文本文件中读取未知长度的字符串,同时将其打印出来。如果程序发现文件没有更多字符串可供读取,则应结束。

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

#define DEFLEN 2
#define CHUNKSZ 2


char *getStrFromFile(FILE *fpin);

int main(void)
{
FILE *fpin;
fpin = fopen("test.txt","r");
int d = 0;

while(1)
{
char *ln;
ln = getStrFromFile(fpin);
if (!ln)
break;
++d;
printf("line %d : %s\n", d, ln);
free(ln);
}
fclose(fpin);
return(0);
}



char *getStrFromFile(FILE *fpin)
{

int i = 0;
char *line;


line = (char*)malloc(DEFLEN);

fgets(line,strlen(line),fpin);

if(line[strlen(line-1)] == '\n')

return line;

char *temp;
temp = line;
char *read;

read = (char*)malloc(CHUNKSZ);

fgets(read,strlen(read),fpin);

line = (char*)malloc(strlen(temp)+strlen(read));

for(i; i<strlen(temp);i++);
line[i]=temp[i];

for(i;i<strlen(read);i++);
line[i+strlen(temp)] = temp[i];

free(read);
free(temp);

return line;

}

问题是,当我运行程序时,它运行一个无限循环(我怀疑是主程序中的 while(1) ),但似乎没有打印出文本文件中的字符串。

它打印的只是:

line 1 :
line 2 :
line 3 :

...依此类推,直到永远。

当我需要打印时,例如:

line 1 : 0
line 2 : 012345
line 3 :
line 4 : 567890

读取 4 行文本文件的程序示例。

坦白说,我被困住了,不知道自己做错了什么。我已经让它打印一些东西,但它是类似于 ASCII 字符 177 177 + 177 177 的东西。

这似乎表明这行代码中存在错误:

line = (char*)malloc(strlen(temp)+strlen(read));

我唯一能想到的是我的回程线;是不正确的?我在这里迷路了,非常感谢您的帮助!

最佳答案

需要扩展缓冲区来读取。但你的方法是错误的。

char *getStrFromFile(FILE *fpin){
int i=0, ch, size=DEFLEN+1;
if(EOF==(ch=fgetc(fpin)))
return NULL;
ungetc(ch, fpin);
char *line = malloc(size);

while(EOF!=(ch=fgetc(fpin)) && ch != '\n'){//Do not include '\n'
line[i++] = ch;
if(i==size-1){
size += CHUNKSZ;
line = realloc(line, size);
}
}
line[i] = '\0';
return line;
}

关于c - 从文本文件中读取未知长度的字符串并打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860172/

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