转载:[https://blog.youkuaiyun.com/sunzhao1000/article/details/84865786]
在C/C++编写代码的过程中,经常会用到检索文件路径的时候, 首先要明确一点,由于“\”符号是C\C++的保留符号,因此直接粘贴路径字符串在代码中是不能使用的。例如下面的方法,是不能得到目标路径字符串的。
string s0 = "C:\Users\Administrator\Downloads\1.txt";
cout << s0.data() << endl;
调试结果:C:UsersAdministratorDownloads.txt
这是由于“\”是C\C++的转译符号,比如“\n”表示换行,“\r”表示回车,等信息。此外单独的“\”符号可以用于代码过长时在上一行打断代码,在下一行承接继续书写的功能
因此如上面的用法时, 编译器会报出warning如下:
1>d:\c++practice\1\project1\main.cpp(11): warning C4129: “A”: 不可识别的字符转义序列
1>d:\c++practice\1\project1\main.cpp(11): warning C4129: “D”: 不可识别的字符转义序列
error如下:
E0965 通用字符名的格式不正确
我们常用的方式是,利用“\”就可以得到预期中的路径层级符号了,如下面代码:
string s0 = "C:\\Users\\Administrator\\Downloads\\1.txt";
cout << s0.data() << endl;
得到的输出结果与预期相同:
C:\Users\Administrator\Downloads\1.txt
但是如果频繁用到路径检索的时候,“\”需要手动添加十分麻烦,这里介绍一种C++的新特性——源码转译。
就是指按照字面源码进行编译,不再区分是否为C\C++保留的符号,使用方法如下:
string s1 = R"(C:\\Users\\Administrator\\Downloads\\1.txt)";
cout << s1.data() << endl;
由此得到的输出与使用“\”是一致的,对比实验如下图所示:
string s0 = "C:C:\Users\Administrator\Downloads\1.txt";
string s = "C:\\Users\\Administrator\\Downloads\\1.txt";
string s1 = R"(C:\Users\Administrator\Desktop\RWtest\write.txt)";
cout << s0.data() << endl;
cout << s.data() << endl;
cout << s1.data() << endl;
system("pause");
原文链接:https://blog.youkuaiyun.com/sunzhao1000/article/details/84865786
1283

被折叠的 条评论
为什么被折叠?



