在C/C++编写代码的过程中,经常会用到检索文件路径的时候, 首先要明确一点,由于“\”符号是C\C++的保留符号,因此直接粘贴路径字符串在代码中是不能使用的。例如下面的方法,是不能得到目标路径字符串的。
string s0 = "C:\Users\Administrator\Desktop\RWtest\write.txt";
cout << s0.data() << endl;
按照上面的方式,在编译阶段就会报出一些warning,而且得到的结果输出也不是预期的路径字符串,如下图。
这是由于“\”是C\C++的转译符号,比如“\n”表示换行,“\r”表示回车,等信息。此外单独的“\”符号可以用于代码过长时在上一行打断代码,在下一行承接继续书写的功能。
因此如上面的用法时, 编译器会报出warning如下图:
我们常用的方式是,利用“\\”就可以得到预期中的路径层级符号了,如下面代码:
string s = "C:\\Users\\Administrator\\Desktop\\RWtest\\write.txt";
cout << s.data() << endl;
得到的输出结果与预期相同:
但是如果频繁用到路径检索的时候,“\\”需要手动添加十分麻烦,这里介绍一种C++的新特性——源码转译。
就是指按照字面源码进行编译,不再区分是否为C\C++保留的符号,使用方法如下:
string s1 = R"(C:\Users\Administrator\Desktop\RWtest\write.txt)";
cout << s1.data() << endl;
由此得到的输出与使用“\\”是一致的,对比实验如下图所示:
string s0 = "C:\Users\Administrator\Desktop\RWtest\write.txt";
string s = "C:\\Users\\Administrator\\Desktop\\RWtest\\write.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");