Копирование символов из файла в массив - PullRequest
0 голосов
/ 21 июня 2019

txtfile.txt - это файл с 30 строками, в каждой строке по 50 символов.Мне нужно скопировать каждый символ из txtfile в Carray.Как я могу это сделать?Я получаю ошибку сегментации, когда пытаюсь.

Я попробовал самый очевидный подход, который просто копирует c в массив.

    int cArray[29][49];

    fp = fopen("input_blinker.txt", "r");

    if(fp==NULL){
            perror("Error in opening file");
            return(-1);
    }

    int columnInd = 0;
    int rowInd = 0;

    do {
            c = fgetc(fp);
            if (feof(fp)) {
                    break;
            }
            cArray[rowInd][columnInd] = c;
            columnInd++;

            if (columnInd > 29){
                    rowInd++;
                    columnInd=0;
            }
    } while(1);
    fclose(fp);
    return(0);

Я ожидаю, что значение c будет скопировано в данный индекс cArray, но язнаю, что это не правильно.Я снова получаю ошибку сегментации.Спасибо за любую помощь (все еще учусь с)

1 Ответ

3 голосов
/ 21 июня 2019

Ваш массив недостаточно большой:

int cArray[29][49];

Это создает двумерный массив размером 29 x 49. Вам нужен массив 30 x 50:

int cArray[30][50];

Ваши проверки границ также неверны:

        cArray[rowInd][columnInd] = c;
        columnInd++;

        if (columnInd > 29){
                rowInd++;
                columnInd=0;
        }

Размер второго измерения - 49, 50 после исправления, поэтому вам следует проверить это значение. Вы также должны поставить проверку, чтобы убедиться, что индекс строки не выходит за границы массива.

        if (columnInd >= 50){
                rowInd++;
                columnInd=0;
        }
        if (rowInd >= 30) {
            break;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...