我需要从用户那里获取未知数量的字符串(通过键盘)并设置一个字符串指针数组,以便它指向输入的所有字符串。
我定义了一个变量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()作为主要功能。
答案 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标准的一部分。