gpt4 book ai didi

c++ - 简单字符串输出不符合预期(出现新行)

转载 作者:行者123 更新时间:2023-11-30 02:02:52 25 4
gpt4 key购买 nike

我有等同于以下的代码来打印出一个短字符串:

#include <iostream>
#include <string>

int main(int argc, const char* argv[])
{
std::string s = "finished??/not finished??";
std::cout << s << std::endl;
return 0;
}

但是输出出现在两行中并且丢失了一些字符:

finished  
ot finished??

但是 /n 不是换行符!发生了什么事?

最佳答案

在翻译的第一阶段(ISO/IEC 14882:2011(E) 的§2.2/1),被称为三字母序列的字符序列被替换为单个字符。

Trigraph sequences (2.4) are replaced by corresponding single-character internal representations.

三字母图之一 ??/\ .第一阶段之后,代码相当于:

#include <iostream>
#include <string>

int main(int argc, const char* argv[])
{
std::string s = "finished\not finished??";
std::cout << s << std::endl;
return 0;
}

作为预处理阶段的结果,"finished\not finished??"被解析为包含转义序列 \n字符串文字代表换行符。因此输出的字符串是:finished<NL>ot finished?? .

为避免这种情况,您需要将其中一个问号转义为 \? .这给你:

#include <iostream>
#include <string>

int main(int argc, const char* argv[])
{
std::string s = "finished?\?/not finished??";
std::cout << s << std::endl;
return 0;
}

这避免了 ??/被拾取为三字母。

关于c++ - 简单字符串输出不符合预期(出现新行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com