मैंने ओटीपी एन्क्रिप्टेड, फ़ाइल को डिक्रिप्ट करने के लिए एक छोटा प्रोग्राम लिखा था। यह ठीक काम करता है।लौटे हुए पॉइंटर को सहेजे बिना फॉपेन क्यों काम करता है?
लेकिन मुझे एहसास हुआ कि मैं "Solution.jpg" पर फॉपेन को कॉल करते समय लौटाए गए फ़ाइल पॉइंटर को सहेजना भूल गया था। जैसा कि आप देख सकते हैं, मैं फ़ाइल सूचक एफ को लिख रहा हूं। मैं सोच रहा हूं कि यह कोड क्यों काम कर रहा है।
#include <stdio.h>
#define FILE_SIZE 4202
int main() {
unsigned char key[FILE_SIZE], otpCipher[FILE_SIZE];
FILE *f = fopen("otpkey.bin", "r");
fread(key, sizeof(char), FILE_SIZE, f);
fclose(f);
f = fopen("otpcipher.bin", "r");
fread(otpCipher, sizeof(char), FILE_SIZE, f);
fclose(f);
fopen("Solution.jpg", "w");
for (int j = 0; j < FILE_SIZE; ++j) {
otpCipher[j] = otpCipher[j]^key[j];
fputc(otpCipher[j], f);
}
fclose(f);
return 0;
}
'f' इसे बंद करने के बाद अमान्य है। तो इसके बाद किसी भी अन्य समारोह में इसका उपयोग अनिर्धारित व्यवहार है। यूबी का मतलब है कि यह काम कर सकता है लेकिन यह क्रैश हो सकता है, या किसी अन्य फाइल को लिख सकता है, या चुपचाप जारी रख सकता है, या कोई अन्य अपरिभाषित कार्रवाई। – kaylum
'fputc (otpCipher [j], f) है;' 'Solution.jpg' पर लिख रहा है? मुझे ऐसा नहीं लगता ... – LPs
@ एलपी मुझे लगता है कि यह ओपी के मामले में करता है। क्योंकि 'fopen ("Solution.jpg", "w");' 'FILE' के लिए उसी स्मृति का पुन: उपयोग करना होता है क्योंकि सूचक' f' पहले से संदर्भ है। तो उस 'fputc' के लिए उपयोग किए जाने वाले' f' में पॉइंटर मौका से मान्य है। – kaylum