#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main ()
{
string strFile = "";
ifstream myfile ("data.doc");
string strPgm = "{ "c" : { "p1": "v1", "p2":"v2" } }";
cout << "n string from program is : " << strPgm <<"n";
if (myfile.is_open())
{
string line;
while ( getline (myfile,line) )
{
strFile = strFile+line;
}
myfile.close();
cout <<"n string from file is : " << strFile <<"n";
}
else cout << "Unable to open file";
return 0;
}
在我的代码中,反斜杠出现在文件输出中,但在程序中硬编码变量值的输出中不存在。我不确定,如果我错过了什么。
文件数据的内容.doc与变量 strPgm 中的内容相同,猫数据.doc ,
"{ "c" : { "p1": "v1", "p2": "v2" } }"
但是我得到的输出是,
程序中的字符串是:
{ "c" : { "p1": "v1", "p2": "v2" } }
文件中的字符串是:
"{ "c" : { "p1": "v1", "p2": "v2" } }"
为什么会这样?两者都是相同的字符串。因此,在将 strFile 转换为 jsonFormat 并解析它时出现问题。
它是处理常量字符串文本中的转义和反斜杠的编译器。因此,如果您的源代码中有类似 "HellonWorld"
的字符串,则编译器会将n
转换为换行符。如果您有一个包含反斜杠的文件,则不会处理这些反斜杠,而是按原样读取。
你误解了这一行的作用:
string strPgm = "{ "c" : { "p1": "v1", "p2":"v2" } }";
它不会创建包含反斜杠的字符串。反斜杠用于转义双引号,以便将整行视为要存储的字符串的一部分,而不是在c
处停止。
如果你真的想把实际的反斜杠写成字符串文字,你必须这样写它们:
string strPgm = "{ \"c\" : { \"p1\": \"v1\", ...
即首先使用反斜杠,并带有转义以使其成为实际的反斜杠(lol):
\
然后是转义的双引号:
"
尽管您似乎不太可能想要存储转义的 JSON。