定義char陣列時的乙個問題

2021-05-23 19:03:56 字數 963 閱讀 6171

今天遇到乙個有趣的關於在c中定義char變數時的乙個問題,程式大致如下:

int main()

int t;

char ch_t[32];

t=1000;

itoc(100, ch_t);  //把100用二進位制字串顯示出來

printf("100 is %s./n", ch_t);

printf("t is %d./n", t);

void itoc(int number, char * bstr)

bstr[size]='/0'; 

}看起來變數t並沒有受到什麼影響,列印結果應該是"t is 1000.", 但事實上列印結果為"t is 768"。是什麼改變了變數t? 函式itoc(int, int)並沒有接受變數t的指標。仔細觀察發現,原來問題出在ch_t變數上。程式的原義是讓ch_t儲存二進位制字串,但因為字串最後乙個字元應該為'/0',所以在函式itoc中的最後一行進行了這種操作,但問題就出在ch_t的長度定義錯誤,應該是32+1才對。

int main()

int t;

char ch_t[32];

t=1000;

printf("t's addr: %p./n",&t);

printf("ch_t's addr: %p./n",&ch_t);

itoc(100, ch_t);  //把100用二進位制字串顯示出來

printf("100 is %s./n", ch_t);

printf("t is %d./n", t);

結果為t's addr: 0012ff7c.

ch_t's addr: 0012ff5c.

兩個變數位址長度相差0x20(32位元組長度),注意ch_t的地位址在t的前面。

由於ch_t陣列的長度少定義了一位,字串結尾符'/0'被存到了t變數的低8位中,導致1000(1111101000)被修改為768(1100000000)。

git push 時的乙個問題

我用的是eclipse 的git 外掛程式管理 不知道是換過登入地點還是改過繫結的郵箱密碼,最近提交會報如下錯誤 eclipe 中 push操作如下 can t connect to any repository git receive pack not permitted on 用git命令列pu...

return 時遇到的乙個問題

今天做業務時遇到了乙個問題 我公司 上游公司 需要接收到 下游公司返回 return 的乙個字串 string string notify 我公司 上游公司 接收到的字串 業務 當我公司 上游公司 接收到下游返回的是 keyi 時,system.out.println 成功 否則,system.ou...

乙個巨集定義引發的問題

問題1 對與buffer巨集定義的理解 一些得到的基本結論 int型資料占有乙個字的空間,char型資料占有乙個位元組的空間,並且char資料型別的定義是為ascii字元表量身定製的 對與buffer的理解 define buffer char int far 0x200 首先,複習對與基本巨集定義...