C/C++ 由fopen_s引发的问题
2012-09-09 18:04
225 查看
fopen_s是个安全函数,实在是太安全了。o(︶︿︶)o 唉。使用要非常小心哦。
一个小程序,获取模块自身路径。
返回自身模块的路径char *类型
带进fopen_s
解决办法:
把指针赋值给字符串数组就可以。减少指针操作。造成空指针崩溃!
一个小程序,获取模块自身路径。
char* Get_Current_Dll_Moudle_Task_Path(char* name) { HMODULE hMod = GetModuleHandle(_T(name)); if(hMod != NULL) { TCHAR szBuffer[MAX_PATH] = {0}; GetModuleFileName(hMod, szBuffer, sizeof(szBuffer) / sizeof(TCHAR) - 1); (strrchr(szBuffer, '\\'))[0] = 0; char *task_txt = szBuffer; return task_txt; } }
返回自身模块的路径char *类型
带进fopen_s
FILE * fp; fopen_s(&fp,task_txt,"r"); //这里的task_txt就是上面函数的指针 while(fgets(data,MAX_PATH,fp) != NULL) { }这样的代码在控制台,或者DLL工程自身的主线程里没有问题,可放到线程里去就立马出错
解决办法:
task_txt = Get_Current_Dll_Moudle_Task_Path("task.dll"); OutputDebugString(task_txt); char txt[MAX_PATH] ={0}; strcpy_s(txt,sizeof(txt),task_txt); OutputDebugString(txt); FILE * fp; fopen_s(&fp,txt,"r"); char data[MAX_PATH]={0}; while(fgets(data,MAX_PATH,fp) != NULL)
把指针赋值给字符串数组就可以。减少指针操作。造成空指针崩溃!
相关文章推荐
- C++: VC6转VC8出现问题:error C2664: “fopen”: 不能将参数 1 从“CString”转换为“const char *”
- 在c++中const引用引发的几个小问题
- C++中动态内存分配引发问题的解决方案
- 日记20141021--C/c++路径中的斜杠,fopen的模式问题
- C++全局变量初始化引发的问题
- 助教:c/c++——数组元素奇偶排列:由此引发对if和while语句的简单问题的思考
- C++ - 谨防因构造函数抛出异常而引发的问题
- C++中继承技术引发的问题:重载(overload),覆盖(override)和隐藏(hide)的区别
- 【C/C++】概念: VC虚函数布局引发的问题
- C/C++ 中头文件相互包含引发的问题
- C++中动态内存分配引发问题的解决方案
- C/C++ 中头文件相互包含引发的问题
- C++中继承技术引发的问题:重载(overload),覆盖(override)和隐藏(hide)的区别
- C++内存泄漏——C++中动态内存分配引发问题的解决方案(2)
- 【C/C++】概念: VC虚函数布局引发的问题
- 避免使用c/c++指针引发的问题
- C++中动态内存分配引发问题的解决方案(转载)
- c++学习笔记fopen问题
- C/C++ 中头文件相互包含引发的问题
- C++: VC6转VC8出现问题:error C2664: “fopen”: 不能将参数 1 从“CString”转换为“const char *” from http://www.cnblogs.com/moon2bird/archive/2009/02/27/1399675.html