硬编码变量输出中没有反斜杠,但在文件输出中存在


#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。

相关内容

  • 没有找到相关文章

最新更新