На самом деле здесь три ошибки сегментации:
fread(content,1,lsize,file_pointer);
strcpy(temp,buffer);
row = strtok(temp,"\n");
Первый из них - fread()
, который пытается записать в память, которая еще не существует для вашего процесса.
Второй - strcpy()
, (поясняющий первый), который вы пытаетесь скопировать в указатель, который ничего не указывает. Никакая память (кроме самой ссылки на указатель) не была выделена для temp
, статически или динамически.
Исправьте это, изменив temp
, чтобы он выглядел следующим образом (статически):
char temp[1024];
Или используйте malloc()
для динамического выделения памяти для него (а также других ваших указателей, чтобы они фактически указывали на что-то), также для content
. Если вы знаете необходимый размер буфера во время компиляции, используйте статическое распределение. Если нет, используйте malloc()
. «Знание» - предмет другого вопроса.
Третий - strtok()
, который собирается изменить temp
en situ (на месте), чего он явно не может сделать, так как temp
никогда не выделялся. В любом случае, не ожидайте, что temp
будет таким же, как только strtok()
будет сделано с ним. По названию переменной я предполагаю, что вы это знаете.
Кроме того, Инициализация указатель не то же самое, что выделение памяти для него:
char *temp = NULL; // temp is initialized
char *temp = (char *) malloc(size); // temp is allocated if malloc returns agreeably, cast return to not break c++
Наконец, пожалуйста, привыкните использовать strncpy()
вместо strcpy()
, это намного безопаснее.