Re: C/C++ 語言新手十三誡 -- Ver. 2016

看板C_and_CPP (C/C++)作者 (小嫩)時間8年前 (2016/06/11 06:51), 編輯推噓3(306)
留言9則, 6人參與, 最新討論串6/6 (看更多)
請問一下 看到第七誡 有個例子不甚了解 ===================== 錯誤例子: (感謝 sekya 網友提供) unsigned char a = 0x80; /* no problem */ char b = 0x80; /* implementation-defined result */ if( b == 0x80 ) { /* 不一定恒真 */ printf( "b ok\n" ); } 說明:語言並未規定 char 天生為 unsigned 或 signed,因此將 0x80 放入 char 型態的變數,將會視各家編譯器不同作法而有不同結果 ====================== 常常看到大家使用或是傳遞buffer都是char 型別, 看完這例子讓我覺得是不是都可能有問題? 把一個超過127的數值塞給char 就可能有問題? 或是拿出來跟超過127的數值做比較也會有問題? 如果這樣是不是buffer 都應該用unsigned char 來宣告跟操作才保險呢 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 92.40.249.208 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1465599064.A.76E.html

06/11 07:40, , 1F
Buffer 都是char*吧
06/11 07:40, 1F

06/11 08:04, , 2F
如果你是要塞8-bit的data 正確來說應該要用uint8_t
06/11 08:04, 2F

06/11 11:14, , 3F
06/11 11:14, 3F

06/11 11:24, , 4F
確實用 char 來當 8-bit 操作是錯誤的做法, 除非你一定
06/11 11:24, 4F

06/11 11:24, , 5F
只傳 ASCII 資料
06/11 11:24, 5F

06/11 14:08, , 6F
能當作8 bit還是在C++14之後呢
06/11 14:08, 6F

06/11 23:55, , 7F
其實char也不一定要是8bit 它的bit個數是CHAR_BIT
06/11 23:55, 7F

06/12 14:27, , 8F
我覺得這例子不對,要換吧?
06/12 14:27, 8F

06/12 14:36, , 9F
抱歉,看錯,我的錯。剛重新看了一下XD
06/12 14:36, 9F
文章代碼(AID): #1NMqHOTk (C_and_CPP)
文章代碼(AID): #1NMqHOTk (C_and_CPP)