Записываю структуру в файл, каждое поле пишу отдельно, поля типа char пишутся без ошибок, а вот uint8_t или обычный int не может записаться, выскакивает предупреждение на стадии компиляции, а при работе уже идет ошибка сегментирования. Что делать?
Пишу под Linux
Ошибка в этой строке:
fwrite(structFile->fileCountBlocks, sizeof(uint8_t), 1, archiv);
Код:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
#define SIZEBLOCK 256
struct File {
char fileName[64];
char fileContent[SIZEBLOCK];
uint8_t fileCountBlocks;
};
void archivingFile(FILE *thisFile, char *name) {
FILE *archiv = fopen("FileArchiv", "wb");
if (archiv == NULL) {
printf("Couldn't create file archive!\n");
return;
}
struct File *structFile = malloc(sizeof(struct File));
strcpy(structFile->fileName, name);
fseek(thisFile, 0, SEEK_END);
uint32_t size = ftell(thisFile);
fseek(thisFile, 0, SEEK_SET);
structFile->fileCountBlocks = size / SIZEBLOCK + 1;
fwrite(structFile->fileName, sizeof(structFile->fileName), 1, archiv);
for (uint8_t i = 0; i < structFile->fileCountBlocks; i++)
{
fread(structFile->fileContent, SIZEBLOCK, 1, thisFile);
fwrite(structFile->fileContent, SIZEBLOCK, 1, archiv);
}
printf("[%i blocks][%u bytes] %s\n", structFile->fileCountBlocks, size, structFile->fileName);
// Если убрать строку, то сегментирования не будет и отработает все как надо, НО мне нужна переменная
fwrite(structFile->fileCountBlocks, sizeof(uint8_t), 1, archiv);
free(structFile);
fclose(archiv);
}
void preparationForArchiving() {
char *name = NULL;
printf("Enter folder or file name: ");
scanf("%ms", &name);
printf("\n");
DIR *dir = opendir(name);
if (dir == NULL) {
FILE *file = fopen(name, "rb");
if (file == NULL) {
printf("Can't open folder or directory: %s\n", name);
return;
} else {
archivingFile(file, name);
}
} else {
//archivingDir();
}
free(name);
}
int main(void) {
preparationForArchiving();
}