我有一个关于函数 getline() 的问题:
getline(&line, &len, file_in);
其中 file_in 是:
FILE *file_in;
char *line = NULL;
size_t len;
每次读取任何一行时,分配的内存(
len
变量)都是 120
我想它是常量,因为它是文件中的默认行大小。
1) 但为什么是
120
?2)可以在任何地方更改此默认大小吗?
3) 是否有任何只计算写入字符的 C 函数?
最佳答案
getline()
和 getdelim()
的实现,用于在没有标准库版本的机器上使用。它使用 256 作为最小分配(而不是 120)——除非编译用于测试,当它使用 8 作为起点以确保重新分配代码得到更多的练习。当没有足够的空间时,分配的大小加倍。这与库设计者在您使用的库中所做的思考过程类似;第一次让内存分配足够大代码大多不需要重新分配。)getline()
的函数,它告诉您它刚刚通过返回值读取的行中有多少个字符。请注意,它在出错时返回 -1(不是 EOF)。虽然这种情况很少发生,但理论上 EOF 可能是 -1 以外的负值。 您还可以通过以下方式操纵系统使用较短的行(直到您阅读长行):
FILE *file_in;
size_t len = 16;
char *line = malloc(len);
并且(对于 sleazeball 编程的终极目标)您甚至不必错误检查分配,因为
char *line = NULL;
也是 getline()
的有效输入:ssize_t nbytes;
while ((nbytes = getline(&line, &len, file_in)) > 0)
...process a line of nbytes including newline...
关于c - getline() 函数中的行长 - c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20036074/