hur.cn - 华软网

 热门搜索

一个关于createfile的小疑惑

  作者:未知    来源:网络    更新时间:2011/10/2
C++">
printf("please input the file name include the path:");
fgets(FileName,MAX_PATH,stdin);
hFile=CreateFile(FileName,GENERIC_READ,\
FILE_SHARE_READ,NULL,OPEN_EXISTING,\
FILE_ATTRIBUTE_NORMAL,NULL);

如果这样子用的话会出错,但是直接在createfile的第一个参数中用"f:\\test\\sampfile.exe"代入的话就没问题,这是为什么?
---华软 网友回答---
其中FileName的定义如下
C++">CHAR FileName[MAX_PATH];

---华软网友回复---
从fgets读入的文件路径需要处理下,比如读入的是c:\a.txt
需要处理如下 a.\\a.txt在传递给函数createfile
正如你测试的一样,需要f:\\test\\sampfile.exe 输入两个\\转义
---华软网友回复---
从fgets读入的文件路径需要处理下,比如读入的是c:\a.txt
需要处理如下 C:\\a.txt在传递给函数createfile
正如你测试的一样,需要f:\\test\\sampfile.exe 输入两个\\转义
---华软网友回复---
是不是先这样清理一下
memset(FileName, 0, MAX_PATH);
---华软网友回复---
回2楼:
不用的,我之前有试过,使用fgets读入FileName之后,再利用printf读出来,即使只用单斜杠'\'也可以正常显示,不会把'\'吞掉。

回4楼:
清理和不清理都没啥关系的,fgets最后会加'\0',所以这个问题不大
---华软网友回复---
用scanf格式化输入就没有这样的问题,但问题是scanf不安全,不做检查的话有可能遭到缓冲区溢出攻击,所以我就用fgets带检查的格式化输入,没想到这么多问题,以前也没遇到过这样的情况。每次出错总会跳到output.c文件中去
---华软网友回复---
引用 5 楼 jn1158359135 的回复:
回2楼:
不用的,我之前有试过,使用fgets读入FileName之后,再利用printf读出来,即使只用单斜杠'\'也可以正常显示,不会把'\'吞掉。

回4楼:
清理和不清理都没啥关系的,fgets最后会加'\0',所以这个问题不大

fgets读入的字符是包含换行符的,需要去掉 
 fgets(FileName,MAX_PATH,stdin);
之后 增加
 FileName[strlen(FileName) - 1] = 0; //去掉换行符
即可。
另外CreateFile失败后可以调用GetLastError()获取错误码。

---华软网友回复---
对的,我也发现了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。