Недавно начал работать с указателями и создал небольшой скрипт, который должен склеивать несколько текстовых файлов.
Однако, когда я пытаюсь вызвать fputs, я получаю ошибку coredump/segmentation. Я подозреваю, что это из-за того, как сохраняется указатель файла. Я обнаружил, что файлы сохраняют его в массиве и пытаются получить позже.
указатель FILE сохраняется в структуре. Кто-нибудь сразу заметит мою ошибку? Я был бы очень признателен!
Структура:
typedef struct{
int listSize;
int listCapacity;
FILE *fileStream;
}FileList;
Создание структуры
FileList fileList;
fileList.listSize=0;
fileList.listCapacity=1;
fileList.fileStream=calloc(fileList.listCapacity,sizeof(FILE));
а затем я добавляю структуру в массив, вызывая
void addFile(FileList* list, FILE* file)
{
list->fileStream[list->listSize]=*file;
}
Однако, когда я звоню
char* buffer[10];
size_t result=0;
result = fread(buffer,1,10,&fileList.fileStream[ii+currentGroupOffset]);
fputs(*buffer,outPutFile);
он падает, я пытался посмотреть значение ii+currentGroupOffset, чтобы убедиться, что оно не выходит за границы массива
любая помощь вообще приветствуется! :)
ii
иcurrentGroupOffset
во время вызова? Ваш массив имеет только один элемент, поэтому оба должны быть равны нулю, чтобы это работало. Как/когда называетсяfopen
? - person Code Painters   schedule 13.11.2012file
, а не*file
, затем используйтеfileList.fileStream[...]
, а не&fileList.fileStream[...]
. - person Omri Barel   schedule 13.11.2012ii
иcurrentGroupOffset
оба равны 0 при первом вызове, что также является временем сбоя. Он вызывается внутри цикла for, перебирающего файлы в массиве. - person Giffesnaffen   schedule 13.11.2012FILE
, а не массивFILE*
, что явно неправильно. Оба ответа ниже совершенно верны! И все же,FILE*
возвращаетсяfopen()
, вы когда-нибудь называли это? - person Code Painters   schedule 13.11.2012