首页新闻找找看学习计划

fopen()函数---文件绝对路径问题

0
悬赏园豆:50 [已解决问题] 解决于 2019-01-29 16:39

疑问:
fopen(文件路径, 文件打开方式);
C语言中存在转义字符'\',在输入绝对路径时,正斜杠/和反斜杠\的使用规范问题

编译器:Microsoft Visual C++ 2010 Express

(测试前提条件:E盘根目录下新建一个txt文件命名为ww.txt,内容输入about后保存)

fopen
测试代码一:
FILE *fp;
char nn[20];
fp = fopen("E:\ww.txt", "r");
fgets(nn, 20, fp);
printf("%s", nn);

测试代码二:(编译出现警告)
只改变下列语句
fp = fopen("E:\ww.txt", "r");

测试代码三:
只改变下列语句
fp = fopen("E:/ww.txt", "r");

测试代码三:
只改变下列语句
fp = fopen("E://ww.txt", "r");

测试代码四:
FILE *fp;
char nn[20];
char ss[20];

gets(ss);
fp = fopen(ss, "r");
fgets(nn, 20, fp);
printf("%s", nn);

在测试代码四的基础上测试不同输入:
输入e:\ww.txt 回车
输入e:\ww.txt 回车
输入e:/ww.txt 回车
输入e://ww.txt 回车

额外输入测试:
e:\\ww.txt
e:///ww.txt

现在对fopen()文件路径的输入时正斜杠反斜杠使用有点疑惑

当使用gets输入路径时到底该输入一个反斜杠还是两个反斜杠?(单从运行结果上我看不什么区别)

测试代码二编译时出现了警告,但是运行结果是正确的,为什么?

蓝海人的主页 蓝海人 | 初学一级 | 园豆:52
提问于:2019-01-26 17:41
< >
分享
最佳答案
1

在UNIX下,路径是用/隔开各级目录,而在windows下,变成了,这源自于dos
另外,字符串里,\用于转义,也就是一般\和后面一个字符在一起才代表最终程序里的一个字符,而\后面再接一个\代表字符,所以应该是两个反斜线。

收获园豆:50
窗户 | 小虾三级 |园豆:850 | 2019-01-28 13:11

还有个问题
当在fopen里面直接输入路径时,使用了一个反斜线出现了警告,但是运行的结果是正确的,
意思是文件仍然被正常打开了,但是\ww.txt这个给出的文件路径是不完整的,警告的内容也是warning C4129: “w”: 不可识别的字符转义序列,为什么还能正常打开文件读写呢?
感谢回答

蓝海人 | 园豆:52 (初学一级) | 2019-01-28 19:43

@蓝海人: \用来转义,于是\和后面那个字符一起构成一个字符。但是编译器发现,\w无法构成一个字符,于是编译器会猜测你写错了,猜测你的意思应该是\和w两个字符,然后按猜测的结果编译。

窗户 | 园豆:850 (小虾三级) | 2019-01-29 16:38

@窗户: 感谢解答

蓝海人 | 园豆:52 (初学一级) | 2019-01-29 16:39
其他回答(1)
0

fopen函数中打开的文件路径可以使用参数化吗

幸运的吉克 | 园豆:202 (菜鸟二级) | 2020-01-09 11:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册