有些人可以帮我创建这个命令
fout <<"osql -Ubatascan -Pdtsbsd12345 -dpos -i""c:\\temp_pd.sql"""<<endl;
结果输出
osql -Ubatascan -Pdtsbsd12345 -dpos -ic:\temp_pd.sql
我想要的输出
osql -Ubatascan -Pdtsbsd12345 -dpos -i"c:\temp_pd.sql"
有人可以帮忙吗?
答案 0 :(得分:5)
您所做的实际上是将多个字符串文字彼此相邻。表达式
"foo""bar"
被解析为两个字符串文字"foo"
和"bar"
。 C和C ++语言表示,当您将字符串文字彼此相邻时,它们会在编译时粘贴到一个大字符串文字中。因此,上面的表达式完全等同于单个字符串文字"foobar"
。
因此,您的表达式将被解析为以下三个字符串文字:
"osql -Udatascan -Pdtsbsd7188228 -dpos -i"
"c:\\temp_pd.sql"
""
当粘贴在一起时形成字符串"osql -Udatascan -Pdtsbsd7188228 -dpos -ic:\\temp_pd.sql" (note that the third string is the empty string
“”`)。
您要做的是使用转义序列\"
在字符串文字中包含文字引号。写得像这样:
"osql -Udatascan -Pdtsbsd7188228 -dpos -i\"c:\\temp_pd.sql\""
通常,引号"
被解释为字符串文字的结尾,除非它前面有反斜杠,在这种情况下它被解释为字符串中的引号字符。