我不知道为什么我会得到这个输出? 我在C++中学习了一些字符串处理,在代码上进行命中和跟踪,并意外地得到了给定代码的输出。 #include<bits/stdc++.h> using namespace std; int main(){ char str[12]={'\67','a','v','i'}; cout<<str; return 0; }

我不知道为什么我会得到这个输出? 我在C++中学习了一些字符串处理,在代码上进行命中和跟踪,并意外地得到了给定代码的输出。 #include<bits/stdc++.h> using namespace std; int main(){ char str[12]={'\67','a','v','i'}; cout<<str; return 0; },c++,C++,令人惊讶的是,我得到了7avi打印 但如果我用“\68”替换“\67”。Repl.it上显示以下错误 请有人解释一下这种行为。nnn表示法,其中nnn是介于0和7之间的数字,用于八进制8表示法。所以在\68中,68不是有效的八进制数。超过67的数字是70。它解释代码的方式是,您将“\6”作为八进制字符6,但在字符文字中还有一个额外的“8”ASCII字符-因此是一个多字符常量,不能存储在char变量中。您可以将其存储在宽字符中: wchar_t str[12]={'\68','a','v','i'

令人惊讶的是,我得到了7avi打印

但如果我用“\68”替换“\67”。Repl.it上显示以下错误

请有人解释一下这种行为。

nnn表示法,其中nnn是介于0和7之间的数字,用于八进制8表示法。所以在\68中,68不是有效的八进制数。超过67的数字是70。它解释代码的方式是,您将“\6”作为八进制字符6,但在字符文字中还有一个额外的“8”ASCII字符-因此是一个多字符常量,不能存储在char变量中。您可以将其存储在宽字符中:

wchar_t str[12]={'\68','a','v','i'};

但是,没有运算符我想您正在尝试使用八进制或十六进制键入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
旁注
请不要使用。它不是标准化的,请参阅,以获得更详细的解释。取而代之的是包括for cout和其他必要的库以满足您的其他需求。

我怀疑OP是否真的需要宽字符。他们只是想让ASCII 67出现。当然,这显然是我在读它。@Chipster:是的,OP说他只是通过尝试和错误来学习,所以虽然我也确信他无意使用宽字符,但意外发现已经引起了他的注意……@TonyDelroy非常感谢你,先生。现在我对实际发生的事情有了一个了解。是的,我只是从这个意义上尝试了一下。谢谢你的澄清。
wcout << str;
wcout << str << '\n';
char str[12] = {68, 'a', 'v', 'i'}; //decimal 
char str[12] = {0x44, 'a', 'v', 'i'}; //hex  
char str[12] = {0104, 'a', 'v', 'i'}; //octal