Проблема заключается в следующей последовательности кода:
int actualInput;
char userString[actualInput][NUM_VALS];
int matchCount = 0;
scanf("%d", &actualInput);
Первая строка объявляет переменную с именем actualInput
, но не присваивает значение этой переменной.
Вторая строка объявляет массив переменной длины (VLA) , используя значение в actualInput
. Использование значения неинициализированной переменной приводит к неопределенному поведению , что в основном означает, что после этой точки в коде может произойти все что угодно. Вероятно, что происходит (в зависимости от вашего описания проблемы), что actualInput
- это либо ноль, либо небольшое число, поэтому вы получаете массив, слишком малый для хранения вашего ввода.
Последняя строка (с scanf
) наконец присваивает значение actualInput
. Возможно, вы думаете, что размер массива изменится сам при изменении actualInput
. Это определенно не происходит. В C, после создания VLA, его размер не может быть изменен.
Решение простое, переставьте код так, чтобы все было выполнено в правильном порядке:
int actualInput;
scanf("%d", &actualInput);
char userString[actualInput][NUM_VALS];
int matchCount = 0;
Как примечание, вы должны действительно выполнить некоторую проверку ошибок, чтобы убедиться, что пользователь вводит разумное число, прежде чем использовать это число для создания массива. Например
int actualInput;
if (scanf("%d", &actualInput) != 1 || actualInput < 1 || actualInput > 1000)
{
printf("That is not a valid array size\n");
return 1;
}
char userString[actualInput][NUM_VALS];