2011-12-21 57 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