我用C++編寫了代碼,用於加密和解密。第一個代碼在矢量中創建一個輸出,然後使用fwrite將其寫入文件中,第二個代碼使用fread讀取第一個輸出。 這裏是我的代碼片段:Fwrite和Fread for Vector返回分割錯誤
第一代碼:
.....
string a;
vector<long long int> c;
cout << "message to be encrypted = ";
cin >> a;
cout << endl;
cout << "Encrypted message : ";
for (i=0;i<a.size();i++)
{
x=(int)a.at(i);
cout << x << " ";
c.push_back(powerMod(x,e,n));
}
for (i=0;i<c.size();i++)
{
//cout << char(c.at(i));
}
cout << endl;
//Write ciphertext c to a file
FILE * pWrite;
pWrite = fopen ("ciphertext", "w");
fwrite (&c , sizeof(c), 1, pWrite);
fclose (pWrite);
輸出是:
message to be encrypted = test
Encrypted message : 116 101 115 116
然後第二代碼:
....
//Read Ciphertext from ciphertext
FILE * pRead2;
pRead2 = fopen ("ciphertext", "r");
fread (&c , sizeof(c), 1, pRead2);
//cout << "ciphertext is " << c << endl;
// Decryption
cout << "Decrypted message : ";
for (i=0;i<c.size();i++)
{
cout << powerMod(c.at(i),d,n) << " " ;
}
cout << endl;
但它的回報:
Segmentation Fault(Core Dumped)
我很感激任何幫助,因爲我不知道問題在哪裏,在fwrite或fread中。但我認爲問題出現在第二次,當它試圖讀取密文(這是一個向量)時,因爲如果我擦除這些行,程序運行完美,但是不解密消息。
謝謝。
你有一個核心轉儲文件嗎?如果是這樣,gdb將幫助你 – doctorlove
你不能將一個矢量存儲到這樣的文件。首先,向量包含一個指向其數據的指針,並且該指針的地址在創建向量的過程中才有意義。嘗試保存向量的元素。另外,請看[boost序列化](http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/index.html)。 – juanchopanza