Почему я не могу объявить массив из трех символов массива char в C? - PullRequest
1 голос
/ 11 апреля 2019

Я пишу программу, которая принимает целое число, а затем создает массив массивов char и находит номер каждого вхождения каждого символа во всех строках.Этот двумерный массив имеет размер "lineNumber".Код показан ниже.Проблема в том, что когда я получаю более 3 цифр, он перестает работать и выходит.Я действительно обнаружил, что проблема заключается в объявлении массива массивов символов.Можете ли вы сказать мне, как преодолеть эту проблему?Например, я хочу взять 1000 строк?Проблема не в функции scanf, я знаю это.Вы можете исправить мой код?

printf("Number of lines: ");
int lineNumber;
int n = scanf("%d", &lineNumber);
if (n == 0) {
   puts("Use integers.");
   return n;
}
char lines[lineNumber][1024]; /* It can't declare more than 3 digit integer */
int i = 0;
for (;i < lineNumber; i++) {
   printf("%d: ", i+1);
   fgets(lines[i], 1024, stdin);
   lines[i][strlen(lines[i])-1] = '\0';
}

/* count the number of occurrence of every char in all lines */

1 Ответ

4 голосов
/ 11 апреля 2019

Если lineNumber, например, 9000:

char lineptr[lineNumber][1024];

затем lineptr использует около 9000*1024 = 9MB стекового пространства. В зависимости от вашей операционной системы и конфигурации системы, это может привести к сбою вашей программы. Пространство стека обычно ограничено.

Если вам нужно много места, лучше выделите память с помощью malloc().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...