Почему эти мусорные данные записываются в мои сжатые файлы?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Почему эти мусорные данные записываются в мои сжатые файлы?

Сообщение Anonymous »

Это моя программа для сжатия данных (она бесплатна, но авторские права разрешены для коммерческого использования):

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

int main(void)
{

FILE * fr, * fw;
char input[201];
char output[201];
unsigned long int size = 0;
unsigned long int rt;
unsigned char ch[5] = {112,111,119,101,114};
unsigned char plus[4]={112,108,117,115};

printf("Enter filename : ");
fgets(input, 200, stdin);
input[strlen (input) - 1] = '\0';
fr = fopen(input, "rb");

if (fr == NULL)
{
fprintf(stderr, "Error during opening of file %s\n", input);
perror("");
return 1;
}

fseek(fr, 0L, SEEK_END);
size = ftell(fr);
fseek(fr, 0L, SEEK_SET);

if (size == -1)
{

fprintf(stderr, "Size doesn't match\n'");
perror("");
return 1;

}

if ( size >  SIZE_MAX)
{

fprintf(stderr, "The size of file is greater than acceptable\n");
perror("");
return 1;

}

unsigned char * buf = NULL;
buf = malloc((size_t)size);
if(buf == NULL)
{

fprintf(stderr, "Buffer failure\n");
perror("");
return 1;

}

int r;
r = fread(buf, size, 1, fr);
printf("%d\n", r);
if (ferror(fr))
{
fprintf(stderr, "Error during reading from file %s\n", input);
perror("");
fclose(fr);
return 1;
}
fclose(fr);
fr = NULL;

mpz_t x;
mpz_init(x);
mpz_t y;
mpz_init(y);

mpz_import(x, size, 1, (size_t)1u, 0, 0, buf);

if (size15)&&(size100)&&(size1000)&&(size10000)&&(size100000)&&(size1000000)&&(size10000000)&&(100000000))
rt = 9999999;
else
rt = 99999999;

mpz_root (y, x, rt);
mpz_t a;
mpz_init(a);
mpz_t b;
mpz_init(b);

mpz_rootrem (a, b, y, rt);

int rootnum = 0;
unsigned long int num = rt;

do
{

num = num/10;
++rootnum;

}while(num != 0);

printf("\nEnter compressed filename : ");
fgets(output, 200, stdin);
output[strlen (output) - 1] = '\0';

memset (buf, 0u, size);

mpz_export(buf, NULL, 1, (size_t)1u, 0, 0, y);

fw = fopen(output, "wb");
if (fw == NULL) {
fprintf(stderr, "Error during opening of file %s\n", output);
perror("");
return 1;
}

int w;
w = fwrite(buf, mpz_sizeinbase(y, 10), 1, fw);
printf("%d\n", w);

if (ferror(fw)) {
fprintf(stderr, "Error during writing to file %s\n", output);
perror("");
fclose(fw);
return 1;
}

fclose(fw);

fw = fopen(output, "ab");
if(fw == NULL)
printf("File can't be written\n'");
if(ferror(fw))
{

fprintf(stderr, "Error during writing to file %s\n", output);
perror("");
fclose(fw);
return 1;

}
int w2;
w2 = fwrite(ch, 5, 1, fw);
printf("%d\n", w2);

fclose(fw);

fw = fopen(output, "ab");
if(fw == NULL)
printf("File can't be written\n'");
if(ferror(fw))
{

fprintf(stderr, "Error during writing to file %s\n", output);
perror("");
fclose(fw);
return 1;

}
int w3;
w3 = fwrite(&rt, rootnum, 1, fw);
printf("%d\n", w3);

fclose(fw);

fw = fopen(output, "ab");

if(fw == NULL)
printf("File can't be written\n'");
if(ferror(fw))
{

fprintf(stderr, "Error during writing to file %s\n", output);
perror("");
fclose(fw);
return 1;

}
int w4;
w4 = fwrite(plus, 4, 1, fw);
printf("%d\n", w4);

fclose(fw);

fw = fopen(output, "ab");
if(fw == NULL)
printf("File can't be written\n'");
if(ferror(fw))
{

fprintf(stderr, "Error during writing to file %s\n", output);
perror("");
fclose(fw);
return 1;

}

int w5;
w5 = fwrite(b, mpz_sizeinbase(b, 10), 1, fw);
printf("%d\n", w5);

fclose(fw);

free(buf);
mpz_clear(x);
mpz_clear(y);
mpz_clear(a);
mpz_clear(b);

return 0;

}
Это файл, сжатый из музыкального клипа Ализе Дж'ен Ай Марре на YouTube:
Скриншот
Это еще один сжатый файл из фильмов «Секреты Майка Олдфилда» и «Далеко над облаками» с YouTube:
Скриншот
Это Терминатор 2: Судный день mkv файл и хуже, чем 2 бывших файла. В нем есть два 0E, имя файла и pluspower! :
Скриншот
Это неприемлемо и разумно ........ Есть ли кто-нибудь из профессионалов GMP, который мог бы сказать, почему эти мусорные данные записано в файлах?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/792 ... ssed-files
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»