避免用char型別作為陣列小標

2021-07-06 09:04:52 字數 640 閱讀 1210

在統計字串的時候常用陣列來統計,字元為陣列下標,如求字串中第乙個不重複(只出現過一次)的字元

但是字元的型別是char型別可能為負數,不能做下標

不能把char強轉成 unsigned int 做下標,因為型別提公升的時候,是按照高位填充的多餘位元組,如果char本身為負數,第8位就是1,轉成unsigned int 或者int時多出來的三個位元組都是填充1;如果是0,則都填充0

如 char  c=-128 ,記憶體中二進位制位 10000000 ,十六進製制為 0x80

無是提公升為unsigned int 還是 int ,其記憶體都是 11111111 11111111 11111111 10000000 即0xffffff80

int main()

結果:4294967168

4294967168

-128

4294967168

4294967168

-128

-128

4294967168

-128

正確做法:

將 char 轉成unsigned char 做下標

如何按INT型別操作CHAR型別陣列

這是學習指標的過程中遇到的乙個問題的記錄。因為c 指標指向具體的記憶體位址,開始以為按照記憶體位址的加減就可以進行任意記憶體資料區域的操作,實際測試的時候發現,定義的指標有不同的型別,比如 int p 定義的是乙個整數型指標。p 1 指向的是下乙個整型數,也就是記憶體位址加4 32位系統 不是記憶體...

怎樣把CString型別轉為char陣列

方法一 char p cstring str hello p str.getbuffer str.getlength str.releasebuffer 方法二 cstring str hello char ch 20 memcpy ch,str,str.getlength 方法三 char ch ...

char 陣列與String型別的互換

1 方法1 string類中的tochararray 方法 string a abcdef char arr a.tochararray 2 方法2 通過string類中的charat 方法與空的char陣列 string a abcdef char arr newchar a.length 建立和...