我是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;
答案 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。