Чтение строки в 2D-массив строк на C

#arrays #c

#массивы #c

Вопрос:

Предположим, у меня есть 2D-массив строк в форме ar[i] [j], где i ссылается на i-ю строку в массиве, а j — конкретный индекс символа в этой строке. Я хочу создать функцию, которая получает размер от пользователя (количество имен) и позволяет им вводить имена, разделенные пробелом. Вот моя попытка выполнить функцию:

 void readNames(char nameptr[][80], int *size)
{
   int i;
   char dummychar;

   printf("Enter size:n");
   scanf("%d", size);
   scanf("%c", amp;dummychar);
   printf("Enter %d names:n", *size);
   for ( i = 0; i < size; i  )
   {
       scanf("%s", amp;nameptr[i]);
   }
   printf("Test?");

}
  

Вот пример ввода:

 Enter size:
5
Enter 5 names:
Sam Paul John Mary Nick
  

После этого массив, который был передан в функцию nameptr, должен иметь следующие значения:

 nameptr[0] = "Sam"
nameptr[1] = "Paul"
nameptr[2] = "John"
nameptr[3] = "Mary"
nameptr[4] = "Nick"
  

Однако, похоже, что-то не так на последнем шаге сканирования, поскольку программа просто истекает и не печатает последнюю инструкцию test. Я не уверен, что это синтаксическая ошибка, и я не уверен, как правильно сканировать 2D-массив строк в этом случае. Любая помощь и идеи приветствуются, большое вам спасибо.

Ответ №1:

Оказывается, ошибка в строке:

    for ( i = 0; i < size; i  )
  

Я передал размер в функцию через указатель, поэтому он должен быть

 for ( i = 0; i < *size; i  )
  

и функция работает так, как ожидалось. Спасибо за чтение.

Комментарии:

1. Вы бы хотели где-нибудь проверить, что введенное значение для *size было меньше или равно количеству строк, доступных в вашем массиве. Всегда проверяйте возврат scanf("%d", size); — без проверки вы на 1 случайный символ от неопределенного поведения .