簡體   English   中英

我不確定為什么要為此得到輸出?

[英]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的打印。

但是,如果我將“ \\ 67”替換為“ \\ 68”。 在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' 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>和滿足您其他需求的其他必需庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM