#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 случайный символ от неопределенного поведения .