Ваш буфер имеет длину CHARS_IN_LINE
:
char temp[CHARS_IN_LINE]; //used for copying to the memory array
Но при вызове fgets
вы предоставляете длину буфера NUMBER_OF_LINES_MEMO
:
fgets(temp, NUMBER_OF_LINES_MEMO, copyCreateFromFile);
Вы должны предоставить фактическую длину буфера temp
для fgets
.
fgets(temp, CHARS_IN_LINE, copyCreateFromFile);
или даже лучше
fgets(temp, sizeof temp, copyCreateFromFile);
Кроме того, длина строк в вашем файле не 4, а 5, потому что fgets
добавляет \n
в конце строки. Следовательно, CHARS_IN_LINE
должно быть не менее 5.
Не имеет прямого отношения:
Вы можете оставить эту строку:
FILE *copyCreateFromFile = fPtrReadMemin;
и используйте непосредственно fPtrReadMemin
вместо copyCreateFromFile
.
Ваш тест конца файла неверный, лучше проверить, если fgets
вернет NULL
.
strcmp
бесполезен, вы можете бросить его.
Общая исправленная и упрощенная функция:
void createFromFile(FILE *fPtrReadMemin, int *meminLines) {
//create a new array of int numbers named meminLines, with the lines of memin text file
//gets pointers for the file memin and for the array meminLines
int i = 0;
char temp[100]; // not using CHARS_IN_LINE but 100 which is a reasonable
// maximal file length.
while (fgets(temp, sizeof temp, fPtrReadMemin) != NULL)
{
meminLines[i] = (int)strtol(temp, NULL, 16);
printf("%04x\n", meminLines[i]);
i++;
}
}
И вы забыли включить следующее:
#include <string.h>
#include <stdlib.h>