Member 13478986 Ответов: 1

Чтение массива строк с помощью scanf?


Итак, у меня есть эта задача, которая требует чтения 4-символьных строк из стандартного ввода в массив. Я попробовал один способ, но каждый раз, когда я пытался напечатать любой элемент этого массива, он всегда печатал последний из входных данных. Например ввод данных:
abcd
надо
ААА
...
zzzz (20-я строка)

printf("%s",arrayString[3]);

Выход:
ззззз

Может ли кто-нибудь объяснить, почему это работает именно так?

Что я уже пробовал:

char *stringArray[20];
char temp[4];
int i;
for(i=0;i<20;i++){
    scanf("%s",temp);
    stringArray[i]=temp;
    }

1 Ответов

Рейтинг:
6

Jochen Arndt

У вас есть массив из 20 строковых указателей.
Каждый из них указывает на одну и ту же память (temp).
Поскольку он используется для чтения пользовательского ввода в цикле, он содержит последнюю входную строку.

Вместо этого вы можете использовать двумерный массив:

char stringArray[20][5];
int i;
for (i=0;i<20;i++)
{
    scanf("%4s", stringArray[i]);
}
Обратите внимание, что я увеличил размер входной строки (всегда должен быть еще один символ для хранения окончания NULL байт) и добавил этот предел также к scanf строка формата.


Afzaal Ahmad Zeeshan

5ед.

Member 13478986

Спасибо!очень ценю