如何更改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,因为持续的输入需要越来越大的分配。这会浪费资源,包括精力和时间。
通过第二个参数传递给getline
的n1
或n2
设置为分配的space的大小,而不是输入的长度阅读,除了更改 getline
的实现之外,您无法更改此内容。 getline
不把输入的长度放在n1
或n2
.
要获取读取的输入的长度,请保存 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,尤其是当分配的大小时。
我正在尝试解决一个问题,在此过程中我使用 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,因为持续的输入需要越来越大的分配。这会浪费资源,包括精力和时间。
通过第二个参数传递给getline
的n1
或n2
设置为分配的space的大小,而不是输入的长度阅读,除了更改 getline
的实现之外,您无法更改此内容。 getline
不把输入的长度放在n1
或n2
.
要获取读取的输入的长度,请保存 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,尤其是当分配的大小时。