【C++】fopen與fopen_s


說明:

VS2010中使用fopen,是沒有問題的。使用VS2015時由於VS的高版本對文件操作的安全性有了較高的要求,所以會出現如下情況:

fopen用法: 

fp = fopen(filename,"w")。//返回值: fopen打開文件成功,返回文件指針(賦值給fp),打開失敗則返回NULL值;

 fopen_s用法:

errno_t err;
err = fopen_s(&fp,filename,"w")//fopen_s打開文件成功返回0,失敗返回非0的錯誤代碼。 

 探討比較 :

1.fopen_s的安全是在於閉函數fopen多了溢出檢測; 
2.在使用上,函數fopen的返回值是文件指針,如果返回的文件指針為NULL時,則表示打開文件失敗。而函數fopen_s的返回值是相應的錯誤代碼,通過查看錯誤代碼代表的含義,有助於排查問題。 
3.fopen_s打開的文件不能共享,如果你打開的文件需要共享的話,不能使用fopen_s函數。可以考慮_fopen,_wfsopen這兩個函數。

 參數解釋:

文件訪問
模式字符串
含義 解釋 若文件已存在的動作 若文件不存在的動作
"r" 打開文件以讀取 從頭讀 打開失敗
"w" 創建文件以寫入 銷毀內容 創建新文件
"a" 后附 后附到文件 寫到結尾 創建新文件
"r+" 讀擴展 打開文件以讀/寫 從頭讀 錯誤
"w+" 寫擴展 創建文件以讀/寫 銷毀內容 創建新文件
"a+" 后附擴展 打開文件以讀/寫 寫到結尾 創建新文件

 

例子:

errno_t err;
string strFile = "D:\\A.txt";
FILE *fp = NULL;
err = fopen_s(&fp, strFile.c_str(), "w"); 
fprintf(fp, "AA=%s", strB.c_str());
fclose(fp);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM