c在不知道长度的情况下分配内存

时间:2017-09-28 02:12:56

标签: c

我是c编程的新手,我试图在不知道长度的情况下分配内存,我希望有人写,当他结束时只需按下输入(c!=' \ n& #39) 但我不知道如何做到这一点。

puts("Enter a text, when you done write the e then enter: ");
char *arr = (char*)malloc(1 * sizeof(char));
while (getchar != EOF)
{
    if(arr == NULL)
    { 
        printf("Error: memory not allocated \n");
        exit(1);
    }
    arr[count] = getchar();
    arr = realloc(arr, count + 1);
}
return arr;

1 个答案:

答案 0 :(得分:1)

最简单的解决方案编辑:如果你有POSIX 是使用getline函数,它会自动分配内存。

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

/* ... other stuff here ... */

char *buffer = NULL;
size_t bufsize = 0;
ssize_t chars_read;

/* optional: set bufsize to something positive, then set buffer = malloc(bufsize); */

chars_read = getline(&buffer, &bufsize, stdin);

/* do stuff with buffer */

free(buffer);

getline会在必要时使用realloc扩大缓冲区,因此您无需自行处理任何内容。在这里,我以零的大小开始它,所以它也会为我做初始的malloc!但是你也可以给它自己分配的缓冲区,如果需要的话,让它getline放大。

调用getline后,chars_read将保留读取的字符总数,包括尾随换行符。如果这是-1则出现问题,例如文件结束或分配内存失败。 bufsize将保留buffer的新大小,该大小可能已更改,也可能未更改。

有关详细信息,请参阅the man page