如何更改getline的默认长度

how to change the default length of getline

我正在尝试解决一个问题,在此过程中我使用 getline 如下输入字符串(我的主要功能的一部分)

 size_t n1=0,n2=0;
  char *a=0, *b=0;   
 getline(&a,&n1,stdin);
 getline(&b,&n2,stdin);

但无论输入什么,我给出的 n1 和 n2 的值总是存储为 120 。我怎样才能克服这个问题来存储我输入的字符串的确切大小

How can I overcome this problem to store the exact size of string I input

首先,您应该停止将此视为问题,而将其视为getline的正常行为。你应该适应getline,而不是指望它适应你。

getline 分配了合理数量的 space 供使用。分配较少的 space 可能需要 getline 更频繁地重新分配 space,因为持续的输入需要越来越大的分配。这会浪费资源,包括精力和时间。

通过第二个参数传递给getlinen1n2设置为分配的space的大小,而不是输入的长度阅读,除了更改 getline 的实现之外,您无法更改此内容。 getline不把输入的长度放在n1n2.

要获取读取的输入的长度,请保存 getline 的 return 值:

size_t l1 = getline(&a, &n1, stdin);
size_t l2 = getline(&b, &n2, stdin);

如果分配的space很在意,用realloc通知内存管理软件不需要多余的space:

char *temp = realloc(a, n1 = l1+1);
if (!temp) a = temp;
temp = realloc(b, n2 = l2+1);
if (!temp) b = temp;

一些 realloc 实现可能会忽略减少分配的尝试 space,尤其是当分配的大小时。