在C++中使用/n时输出异常:为何打印出12142?
问题解答
核心原因:误用了C++的多字符字面量
你写的'/n'是多字符字面量,这是C++里的特殊语法:当用单引号包裹多个字符时,编译器会将其视为一个int类型的值,具体数值由编译器实现定义。
在Visual Studio 2021中,多字符字面量的计算规则是将每个字符的ASCII值按小端字节序拼接:
- '/'的ASCII值是47(十六进制
0x2F) - 'n'的ASCII值是110(十六进制
0x6E)
拼接后得到十六进制0x6E2F,转换成十进制就是12142——这正是你看到的输出结果。
对应预期需求的正确写法
根据你的不同预期,正确代码如下:
- 若想输出字符串
/n:用双引号包裹字符串cout << "/n"; - 若想输出单个字符
/或换行符:单引号包裹单个字符(注意换行符是反斜杠\n,不是正斜杠/n)cout << '/'; // 输出 '/' cout << '\n'; // 输出换行 - 若想输出两个字符的ASCII值(47和110):分开输出每个字符的ASCII值
cout << (int)'/' << (int)'n'; // 输出 47110
补充说明
多字符字面量属于C++的“实现定义行为”,不同编译器(如GCC、Clang)可能有不同计算逻辑,因此这种写法不推荐日常使用。编码时应遵循:单引号仅用于包裹单个字符,字符串用双引号包裹,避免语法混淆。
内容的提问来源于stack exchange,提问作者nnutural
相关产品推荐
相关产品推荐

