2011-12-21 72 views
0

我想從字節讀取文件到字節。但我的程序在第一個打破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(); 

問題是什麼?

我需要ecnrypt文件,然後加密它。 所以我決定從輸入文件中讀取字節,並將其寫入另一個文件。

+0

你需要更清楚地說明什麼程序在做什麼,爲什麼它是錯的,你想什麼做的事情。 – 2011-12-21 01:50:43

+0

我注意到你正在使用GMP。如果你不使用mpz_set(K,mpz_t op)這樣的設置在第一個while循環中設置K的值? – Neo 2011-12-21 01:51:29

+0

這不是必須的。它沒有它的作品。我已經在沒有文件的程序中測試過它。 – 2011-12-21 02:03:10

回答

0

它返回流,所以在第一次之前,通過使用ifstream :: good()檢查流是否良好。您也可能需要使用相同的功能來檢查文件結尾。

+0

'istream :: read'在嘗試輸入之前檢查流狀態。 – Cubbi 2011-12-21 02:58:21

4

您正在將未初始化的指針傳遞給讀取函數,這是未定義的行爲。

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

它通過了這一行,但後來在'outfile.write' – 2011-12-21 07:14:07