區別,我在行爲下列區別不解:的fscanf/fscanf_s行爲
// 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,你會得到空字符串第一)。編譯在VC++ - VS2005上。任何人都可以重現?誰能解釋一下?
謝謝!
這看起來好像是錯誤的用法。 '81'應該是'cmd'緩衝區的大小。但是嗎?即使使用「安全」功能,這也是編寫崩潰代碼的好方法。在讀入靜態字符數組時,應該有'sizeof(cmd)',一些變量存儲緩衝區被分配的長度,或者調用給定緩衝區的大小/容量函數。雖然你的例子在技術上是正確的,但它可能會讓很多人誤解。 – 2013-09-02 13:04:51