Передача аргумента 4 в fwrite из несовместимого типа указателя - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу скопировать содержимое исходного файла в целевой файл, но получаю это предупреждение:

warning: passing argument 4 of ‘fwrite’ from incompatible pointer type [-Wincompatible-pointer-types]

fwrite(target, sizeof(char), targetSize, sourceContent);

Если я игнорирую предупреждение, я получаю ошибку сегментации.

FILE *source = fopen(argv[1], "r");
FILE *target = fopen(argv[2], "w");

if (source == NULL || target == NULL) {
    printf("One or both files do NOT exist\n");
    abort();
}

fseek(source, 0, SEEK_END);
long sourceSize = ftell(source);

fseek(source, 0, SEEK_SET);
char *sourceContent = (char *)malloc(sourceSize);
fread(sourceContent, sizeof(char), sourceSize, source);


long targetSize = sourceSize;
fwrite(target, sizeof(char), targetSize, sourceContent);

1 Ответ

1 голос
/ 06 апреля 2020

И fread(), и fwrite() принимают буфер, в котором можно прочитать / записать, как первый аргумент, а файл - как четвертый.

// This is fine.
fread(sourceContent, sizeof(char), sourceSize, source);
// Swap the first and fourth argument in the fwrite call.
fwrite(sourceContent, sizeof(char), targetSize, target);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...