Здесь есть проблема:
//Increment counter
i++;
printf("%s", lines[i]); // you're printing the next file that does not yet exist
Правильный код:
printf("%s", lines[i]);
//Increment counter
i++;
И еще один здесь:
for (int j = 0; j < 100; j++) { // your loop variable is j
printf("%s \n", lines[i]); // but you use i here.
}
Правильный код:
for (int i = 0; i < 100; i++) {
printf("%s \n", lines[i]);
}
И еще один здесь:
arrayLen += arrayLen;
char ** newLines = (char**)realloc(lines, 200 * sizeof(char*));
// here the new length of your array is inconditionally 200
// but actually the new array length is arrayLen
Правильный код:
arrayLen += arrayLen;
char ** newLines = (char**)realloc(lines, arrayLen * sizeof(char*));
Могут быть и другие проблемы, я не все проверял.
Кстати: sizeof(char)
равно 1 по определению, так что вы можете просто уронить его.
Кстати: arrayLen += arrayLen;
Вы уверены, что это то, что вы хотите?Вы удваиваете размер своего массива каждый раз.Это не обязательно неправильно, но при использовании этого метода длина массива очень быстро увеличится до очень большого числа.Вы, вероятно, хотели это: arrayLen += STEPSIZE;
BTW3:
while (fgets(buffer, 3000, inputFile))
на самом деле это не так, но вам лучше написать это:
while (fgets(buffer, sizeof buffer, inputFile))
, что исключаетодна из двух жестко закодированных констант 3000
.
BTW4: в конце вы печатаете только первые 100 строк, которые вы прочитали.Вы должны иметь возможность исправить это самостоятельно.
Кстати: вы также должны освободить всю выделенную память.Я оставляю это как упражнение для вас.Подсказка: это около трех строк кода, которые нужно добавить в конце main
.