我不确定为什么我会为此获得输出?
I am not sure why I am getting output for this?
我正在学习一些C++字符串处理,并且正在对代码进行命中和跟踪,令人惊讶的是得到了给定代码的输出。
#include<bits/stdc++.h>
using namespace std;
int main(){
char str[12]={'67','a','v','i'};
cout<<str;
return 0;
}
令人惊讶的是,我打印了 7avi .
但是如果我用"\68"替换"\67"。Repl.it (https://repl.it/languages/cpp) 上显示以下错误
#include<bits/stdc++.h>
using namespace std;
int main(){
char str[12]={'68','a','v','i'};
cout<<str;
return 0;
}
main.cpp:6:19: warning: multi-character character constant [-Wmultichar]
char str[12]={'68','a','v','i'};
^
main.cpp:6:19: error: constant expression evaluates to 1592 which cannot
be narrowed to type 'char' [-Wc++11-narrowing]
char str[12]={'68','a','v','i'};
^~~~~
main.cpp:6:19: note: insert an explicit cast to silence this issue
char str[12]={'68','a','v','i'};
^~~~~
static_cast<char>( )
main.cpp:6:19: warning: implicit conversion from 'int' to 'char' changes
value from 1592 to 56 [-Wconstant-conversion]
char str[12]={'68','a','v','i'};
~^~~~~
2 warnings and 1 error generated.
compiler exit status 1
请有人解释这种行为。
nnn
表示法,其中 nnn 是 0 到 7 之间的数字,用于八进制(以 8 为基数)表示法。 所以在68
中,68不是一个有效的八进制数。 比67多的第一名是70。 它解释代码的方式是,您将"\6"作为八进制字符 6,但在字符文本中附加一个'8'
ASCII 字符 - 因此是一个多字符常量,不能存储在char
变量中。 您可以将其存储在"宽字符"中:
wchar_t str[12]={'68','a','v','i'};
但是,没有operator<<
重载来显示wchar_t
数组,因此您的cout << str
行将与void*
重载匹配,并且只显示数组中第一个元素的内存地址,而不是任何字符本身。
您可以使用以下方法解决此问题:
wcout << str;
另外,我建议在输出后也放置一个换行符。 如果没有它,您的输出可能会在您看到它之前被控制台提示符覆盖,尽管这在您使用的在线 REPL 中不会发生。 它应如下所示:
wcout << str << 'n';
我认为您正在尝试使用八进制或十六进制输入 ASCII 字符。八进制通常以0
开头,但十六进制以0x
开头)。只是不要将 ASCII 代码放在引号中,而是将代码直接放入数组中,如下所示:
char str[12] = {68, 'a', 'v', 'i'}; //decimal
char str[12] = {0x44, 'a', 'v', 'i'}; //hex
char str[12] = {0104, 'a', 'v', 'i'}; //octal
旁注
请不要使用<bits/stdc++.h>
。它不是标准化的(有关更详细的解释,请参阅此处。而是包括用于cout
的<iostream>
和满足您其他需求的其他必要库。
相关文章:
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 不确定如何装饰我的C++库代码以在 C 中使用
- C++功能泄漏内存,我是C++新手,不确定如何解决
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 代码在 CodeSignal 中工作不正确。不确定这是否是我的代码缺陷
- 为什么以下代码是不确定的?
- 编译错误:"lvalue required as left operand of assignment" 不确定原因
- 误用指针会产生分段错误。我仍然不确定如何纠正它
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- Windows 10命令提示符的输出不正确
- 代码输出随机符号,我不确定出了什么问题
- 不确定输出双精度或整数的代码行
- 我不确定为什么我会为此获得输出?
- 试图在每次输出后使用一个函数摆脱'0',但不确定我可以返回什么
- 不确定这两个循环中的一个如何产生正确的输出
- 我不确定为什么我会从功能中获得此输出
- 默认情况下构造函数插入数据后,我没有得到任何输出,但我不确定为什么不
- C/C++ 不确定值:编译器优化提供不同的输出(示例)
- 为什么此输出看起来不确定?(是十六进制文字的冲刺、printf 还是语法?
- C++ 不确定如何让我的程序输出空间的位置