如何在C中实时为用户输入的字符串分配内存?

时间:2014-03-06 20:17:31

标签: c arrays pointers malloc realloc

我需要从用户那里获取未知数量的字符串(通过键盘)并设置一个字符串指针数组,以便它指向输入的所有字符串。

我定义了一个变量char tmp_strng[]来保存用户使用以下代码输入的字符串:

printf("Enter string number %d\n",num_of_strngs+1);
fflush(stdin);
scanf("%s",tmp_strng);

之后我想为char *str_arr[]分配更多内存,这是一个包含所有字符串指针的数组。起初我用check检查内存:

if((tmp_str_arr[num_of_strngs]=realloc(str_arr,strlen(tmp_strng)))==NULL)
        {
            free(str_arr);
            printf("Error: couldn't allocate memory. Exiting.");
            return 1;
        }
str_arr[num_of_strngs]=tmp_str_arr[num_of_strngs];
str_arr[num_of_strngs++]=tmp_strng;

那真的不起作用......有人能告诉我这里有什么不对(或者对吗)?我想尽可能地坚持使用realloc()和scanf()作为主要功能。

1 个答案:

答案 0 :(得分:0)

使用getline()功能,它将自动malloc()足够的内存来保持线路。用法如下:

char* line = NULL;    //Setting this to NULL is important!
size_t bufferSize;
size_t characterCount = getline(&line, &bufferSize, stdin);
if(characterCount == (size_t)-1) {
    //error handling
} else {
    //do something with this line
    free(line);
}

getline()函数就像asprintf()一样,是POSIX-2008标准的一部分。