Мне нужно получить неизвестное количество строк от пользователя (через клавиатуру) и установить массив указателей строк, чтобы он указывал на все введенные строки.
Я определил переменную 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)
— поведение undefined (хотя в некоторых реализациях оно может работать) - person Filipe Gonçalves   schedule 07.03.2014num_of_strngs
,str_arr
иtmp_str_arr
. - person Filipe Gonçalves   schedule 07.03.2014num_of_strngs
— это переменная типа int, которая содержит количество строк вstr_arr[]
(если хотите, длину массива).str_arr
определяется какchar *str_arr[];
, аchar *tmp_str_arr[];
- это просто временный массив, который я использую в случае сбоя выделения, если я не буду его использовать и выделение не удастся, я потеряю весь массив. - person user34920   schedule 07.03.2014