【发布时间】:2020-09-03 11:12:23
【问题描述】:
我有一个问题,如何在不指定该行大小的情况下从文件中下载一行文本?我不想使用 fgets,因为您必须提前将 fgets 提供给角色。我可以加载整个文件,但不能加载一行。
FILE *f
long lSize;
char *buffer;
size_t result;
f = fopen("file.txt", "r");
fseek(f, 0, SEEK_END);
lSize = ftell(f);
rewind (f);
buffer = (char*)malloc(sizeof(char)*lSize);
result = fread(buffer,1,lSize, f);
fclose(f);
free(buffer);
【问题讨论】:
-
谢谢。我会尝试实现它。 :)
-
按照 user3121023 的建议去做。现在你有线了。如果您只想要 that 行,则可以使用以下命令将缓冲区修剪为确切大小:
buffer = realloc(buffer,strlen(buffer) + 1);请注意:sizeof(char)是 always1(根据定义) ,而不管给定架构上char的实际位大小如何,因此您可以[并且应该] 只是这样做:buffer = malloc(lSize);大多数拱门有 8 位字节,但是,例如,某些 TI DSP芯片,最小可寻址单元为16位。所以,char占用 16 位,但sizeof(char)仍然1在那里。
标签: c fread ansi line-by-line gcc-pedantic