Читать файл с потоками - PullRequest
0 голосов
/ 21 декабря 2011

Я хочу прочитать файл от байта к байту. Но моя программа разбивается на первый while

 ifstream infile("new.pdf",ifstream::binary);
 ofstream outfile("file.pdf",ofstream::binary);
 char *c;
 while(infile.read(c,sizeof(char)))
 {
    mpz_t M;
    mpz_t K;
    mpz_init2(M,10);
    mpz_set_ui(M,(int)c);
    mpz_init2(K,10);
    mpz_powm(K,M,e,n);
    char *x;
    mpz_get_str(x,10,K);
    outfile.write(x,sizeof(char));
 }

 infile.close();
 outfile.close();
 system("pause");
 infile.open("file.pdf",ifstream::binary);
 outfile.open("newt.pdf",ofstream::binary);
 while(infile.read(c,sizeof(char)))
 {
    mpz_t C;
    mpz_t K;
    mpz_init2(K,10);
    mpz_init2(C,10);
    int x=(int)c;
    mpz_set_ui(K,x);
    mpz_powm(C,K,d,n);
    char *s;
    mpz_get_str(s,10,C);
    outfile.write(s,sizeof(char));
  }
 infile.close();
 outfile.close();

В чем проблема?

Мне нужно зашифровать файл и затем зашифровать его. Поэтому я решил прочитать байт из входного файла, расшифровать его и записать в другой файл.

Ответы [ 2 ]

4 голосов
/ 21 декабря 2011

Вы передаете неинициализированный указатель в функцию чтения, это неопределенное поведение.

char *c;  // this points off in space or who knows where
while(infile.read(c,sizeof(char))) // therefore, this is undefined behavior

Попробуйте это:

char c;
while(infile.read(&c,sizeof(char)))
0 голосов
/ 21 декабря 2011

возвращает поток, поэтому перед первым оператором while проверьте, является ли поток хорошим, используя ifstream :: good (). Также вам может понадобиться использовать ту же функцию для проверки конца файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...