C語言字串初始化關於數字

2021-09-25 21:21:20 字數 3206 閱讀 5088

先判斷下面的**:

char str1 = "\0123";

printf("size = %d\n", sizeof(str1));

可能你會大聲的說出:5

有可能你的理由是:

第乙個:\

第二個:0

第三個:1

第四個:2

第五個:3

還有可能你的理由是:

第乙個:\0

第二個:1

第三個:2

第四個:3

第五個:\0

如果你的理由是最上面那個,那麼你應該把c語言基礎書好好看一篇。

而正確答案是:3

下面來講一下c語言初始化關於「 \ 」後面的數字的問題

第一條規則:字元「 \ 」後面的數字會以八進位制的形式賦值

char str1 = "\1081";

for (int i = 0; str1[i]; ++i)

cout<<(int)str1[i]<<" ";

printf("size = %d\n", sizeof(str1));

輸出:8 56 49 size = 4

第二條規則:字元「 \ 」後面的數字不能大於7,否則原樣轉換

char str1 = "\876";

for (int i = 0; str1[i]; ++i)

cout<<(int)str1[i]<<" ";

printf("size = %d\n", sizeof(str1));

輸出:56 55 54 size = 4

依次是字元「 8 」,字元「 7 」,字元「 6 」

第三條規則:字元「 \ 」後面的數字個數不會多餘3個

char str1 = "\1111";

for (int i = 0; str1[i]; ++i)

cout<<(int)str1[i]<<" ";

printf("size = %d\n", sizeof(str1));

輸出:73 49 size = 3

第四條規則:3個以內的字元只要有樹大於7,就會停止轉換

char str1 = "\1111";

for (int i = 0; str1[i]; ++i)

cout<<(int)str1[i]<<" ";

printf("size = %d\n", sizeof(str1));

輸出:9 56 55 size = 4

\11:轉為十進位制的9

第五條規則:3個的數的數字**為十進位制)大於127,那麼就會變為負數,因為有符號char的範圍(-128 ~ 127)

char str1 = "\200";

for (int i = 0; str1[i]; ++i)

cout<<(int)str1[i]<<" ";

printf("size = %d\n", sizeof(str1));

輸出:-1 size = 2

\200:轉換為十進位制為128,但是有符號字元不能大於127,只有負0(-128)

第6條規則:3個的數的數字**為十進位制)大於255,那麼高位會被裁剪

char str1 = "\377";

for (int i = 0; str1[i]; ++i)

cout<<(int)str1[i]<<" ";

printf("size = %d\n", sizeof(str1));

輸出:-1 size = 2

\377:轉換為十進位制為255

char str1 = "\777";

for (int i = 0; str1[i]; ++i)

cout<<(int)str1[i]<<" ";

printf("size = %d\n", sizeof(str1));

輸出:-1 size = 2

\777:裁剪後再轉換為十進位制為255

第7條規則:如果" \ "不是數字,那麼有時候轉換後的值也不是對應的字元

char str1 = "\a";//65 size = 2

char str1 = "\b";//66 size = 2

char str1 = "\c";//67 size = 2

char str1 = "\d";//68 size = 2

char str1 = "\e";//27 size = 2

char str1 = "\f";//70 size = 2

char str1 = "\g";//71 size = 2

char str1 = "\a";//7 size = 2

char str1 = "\b";//8 size = 2

char str1 = "\c";//99 size = 2

char str1 = "\d";//100 size = 2

char str1 = "\e";//27 size = 2

char str1 = "\f";//12 ize = 2

char str1 = "\g";//103 size = 2

\e、\a、\b、\e、\f:其實都會變為特殊字元,這個是編譯器的問題,不用去記住,知道就好

總結:

字元「 \ 」後面的數字會以八進位制的形式賦值

字元「 \ 」後面的數字不能大於7,否則原樣轉換

字元「 \ 」後面的數字個數不會多餘3個

3個以內的字元只要有樹大於7,就會停止轉換

3個的數的數字**為十進位制)大於127,那麼就會變為負數,因為有符號char的範圍(-128 ~ 127)

3個的數的數字**為十進位制)大於255,那麼高位會被裁剪

如果" \ "不是數字,那麼有時候轉換後的值也不是對應的字元

c語言字串初始化 C 字串

c 提供了以下兩種型別的字串表示形式 c 風格的字串起源於 c 語言,並在 c 中繼續得到支援。字串實際上是使用null字元 0 終止的一維字元陣列。因此,乙個以 null 結尾的字串,包含了組成字串的字元。下面的宣告和初始化建立了乙個 hello 字串。由於在陣列的末尾儲存了空字元,所以字元陣列的...

C 列表初始化,字串初始化

列表初始化 int a 0 int a 全面應用 int a int a 0 預設初始化 定義變數時,沒有指定初值,則變數被預設初始化。定義函式體外的變數被初始化為0,函式體內部的內建型別變數不被初始化。字串初始化 string s1 string s2 s1 string s2 s1 string...

C語言字串初始化錯誤

在寫指標陣列題目時,遇到數字轉換問題。問題如下 將大於0小於1000的阿拉伯數字轉換為羅馬數字。表示個位數 i,ii,iii,iv,v,vi,vii,viii,ix 表示十位數 x,xx,xl,l,lx,lxx,l xc 表示百位數 c,cc,ccc,cd,d,dc,dcc,dccc,cm 我選擇了...