【发布时间】:2014-03-06 20:17:31
【问题描述】:
我需要从用户那里(通过键盘)获取未知数量的字符串,并设置一个字符串指针数组,以便它指向所有输入的字符串。
我定义了一个变量char tmp_strng[] 来保存用户使用以下代码输入的字符串:
printf("Enter string number %d\n",num_of_strngs+1);
fflush(stdin);
scanf("%s",tmp_strng);
之后,我想为char *str_arr[] 分配更多内存,该数组将保存指向所有字符串的指针。一开始我用检查做内存分配:
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() 作为这里的主要函数。
【问题讨论】:
-
fflush(stdin)是未定义的行为(尽管它可能在某些实现中起作用) -
这不足以理解您的问题。请告诉我们什么是
num_of_strngs、str_arr和tmp_str_arr。 -
您不能重新分配数组。它们被固定为它们声明的大小。
-
num_of_strngs是一个 int 变量,用于保存str_arr[]中的字符串数量(如果您愿意,可以使用数组长度)。str_arr被定义为char *str_arr[];和char *tmp_str_arr[];只是一个临时数组,我在分配失败时使用它,如果我不使用它并且分配失败,我将丢失整个数组。 -
@TerraOrbis - 我可以将内存分配给大小为 x 的数组,然后创建一个大小为 x+1 的新数组,并使用指向大小为 x 的数组的指针指向大小为 x 的数组吗? x+1?
标签: c arrays pointers malloc realloc