में अंतर मैं व्यवहार में निम्नलिखित अंतर से हैरान हूँ fscanf_s:fscanf/व्यवहार
// suppose myfile.txt contains a single line with the single character 's'
errno_t res;
FILE* fp;
char cmd[81];
res = fopen_s(&fp, "D:\\myfile.txt", "rb");
fscanf(fp,"%80s",cmd); // cmd now contains 's/0'
fclose(fp);
res = fopen_s(&fp, "D:\\myfile.txt", "rb");
fscanf_s(fp,"%80s",cmd); // cmd now contains '/0' !
fclose(fp);
परिणाम कॉल के क्रम में निर्भर नहीं है (यानी, fscanf_s पहले फोन, आप खाली मिलता था स्ट्रिंग पहले)। वीसी ++ - वीएस2005 पर संकलित। क्या कोई पुनरुत्पादित कर सकता है? क्या कोई समझा सकता है?
धन्यवाद!
यह वास्तव में गलत उपयोग की तरह लगता है। '81'' cmd' बफर का आकार माना जाता है। लेकिन क्या यह है? "सुरक्षित" फ़ंक्शन का उपयोग करने के बावजूद, क्रैश होने वाले कोड को लिखने का यह एक अच्छा तरीका है। वर्णों की स्थिर सरणी में पढ़ने के मामले में 'sizeof (cmd) 'होना चाहिए, कुछ चर जो बफर को आवंटित किया गया है, या दिए गए बफर के आकार/क्षमता फ़ंक्शन को कॉल करता है। जबकि आपका उदाहरण तकनीकी रूप से सही है, यह कई लोगों के लिए भ्रामक हो सकता है। –