詭異的字元處理,你知道原因嗎

2021-09-06 11:07:06 字數 1143 閱讀 4187

**如下:

#define mdpw_ready          "\010"

int test(char *cmd)

當呼叫test(mdpw_ready)返回結果是多少呢?大家看字元前有個\0,字串結束的標識,那又該怎麼理解哦。。。

大家先來看c裡面對八進位制和十六進製制的處理。

c語言中8進製和16進製制怎麼表示

c語言本身支援的三種輸入是:

1. 十進位制。比如20,457; 

2. 十六進製制,以0x開頭。比如0x7a; 

3. 八進位制,以0開頭。比如05,0237

所以c語言沒有二進位制輸入,最多可用函式去實現。

八進位制數的表達方法

c/c++規定,乙個數如果要指明它採用八進位制,必須在它前面加上乙個0(數字0),如:123是十進位制,但0123則表示採用八進位制。這就是八進位制數在c、c++中的表達方法。

c和c++都沒有提供二進位制數的表達方法

現在,對於同樣乙個數,比如是100,我們在**中可以用平常的10進製表達,例如在變數初始化時:

int a = 100;

我們也可以這樣寫:

int a = 0144; //0144是八進位制的100;

千萬記住,用八進位制表達時,你不能少了最前的那個0。否則計算機會通通當成10進製。不過,有乙個地方使用八進位制數時,卻可以不使用加0,那就是用於表達字元的「轉義符」表達法。

八進位制數在轉義符中的使用

我們學過用乙個轉義符'/'加上乙個特殊字母來表示某個字元的方法,如:'\n'表示換行(line),而'\t'表示tab字元,'\''則表示單引號。今天我們又學習了另一種使用轉義符的方法:轉義符'\'後面接乙個八進位制數,用於表示ascii碼等於該值的字元。

比如,查一下ascii碼表,我們找到問號字元(?)的ascii值是63,那麼我們可以把它轉換為八進值:77,然後用 '\77'來表示'?'。由於是八進位制,所以本應寫成 '\077',但因為c/c++規定不允許使用斜槓加10進製數來表示字元,所以這裡的0可以不寫。

例如:printf("\077\n\77\n")

則輸出結果為:??

現在大家知道為什麼是8了嗎?

詭異的字元處理,你知道原因嗎

如下 define mdpw ready 010 int test char cmd 當呼叫test mdpw ready 返回結果是多少呢?大家看字元前有個 0,字串結束的標識,那又該怎麼理解哦。大家先來看c裡面對八進位制和十六進製制的處理。c語言中8進製和16進製制怎麼表示 c語言本身支援的三種...

Bug管理你需要知道的事情

一條bug記錄最基本應包含 bug編號 bug嚴重級別,優先順序 bug產生的模組 首先要有bug摘要,闡述bug大體的內容 bug對應的版本 bug詳細現象描述,包括一些截圖 錄影 等等 bug出現時的測試環境,產生的條件即對應操作步驟 高質量的bug記錄 通用ui要統 一 準確 缺陷報告的ui要...

c 詭異的字元陣列

字元陣列 一般以 0結尾 如果嘗試不以 0結尾 會發生什麼呢?如圖,在vscode裡,環境是mingw64的 gdb,輸出c2時,把c2和c1放在一起輸出了,有點詭異 去vs裡除錯一下 如圖,字元陣列的位址值 應該是 首元素的位址 執行時 c2 的輸出 直接亂碼了 等等 應該是c2輸出的時候 沒有遇...