C語言提供了強大的記憶體操作功能,其中memchr()函式可以直接從記憶體中抓取你需要的字元char.
memchr()記憶體查詢字元函式:主要用於從記憶體中查詢自己需要的字元位置。
(1)函式原型:
void *memchr(const void *_Buf ,int _Val,size_t _MaxCount)
(2)標頭檔案
#include <string.h>
(3)功能:
在記憶體中,從第一個變數const void *_Buf給出的記憶體地址開始,以位元組為單位,按照第二個變數int _Val所對應的位元組值查詢。如果有則返回所對應的位元組記憶體地址,如果沒有則返回NULL或者奔潰。第三個變數size_t _MaxCount表示查詢的最大範圍。
(4)基礎例項程式碼:
char a[]="hello zobol!"; char c='z'; char* ret; ret = (char*)memchr(a,c,strlen(a)); printf("%c",*ret);//*的意思是取出地址所對應記憶體位置的值 printf("%s",ret);//%s是用於字串輸出,輸入一個記憶體的地址,會自動輸出從開頭到\0的值
(5)輸出情況:
(6)問題1:int _Val的取值範圍0~255,可以超過嗎?:
回答:不可以,int_Val的值對應是一位元組二進位制0000 0000~11111111的無符號數值,不可以超過否則會發生錯誤,程式直接奔潰,不是返回空指標。一般情況下用char表示,自動強制轉換為int比較好。
例項程式碼:
(注意返回值,程式是直接奔潰,不是正常結束)
(7)問題2:用於字串查詢,不知道字串長度怎麼辦?
回答:用strlen()函式獲取,不能像python那樣用-1表示結尾,C語言中字串不是物件沒有被封裝。
(8)問題3:對於'\0'能查詢嗎?
回答:可以,memchr針對的是一段記憶體,而不是一個字串,只要二進位制對於的值相等,就會返回。
(9)問題4:如果有兩個重複的字元值,在查詢範圍內,返回哪一個?
回答:返回離const void *_Buf開頭記憶體地址最近的字元地址。
示例程式碼:
(10)問題5:如果size_t _MaxCount範圍超過字串長度,或者在合法範圍內沒有找到符合的字元值,會返回什麼?
回答:並不是返回空指標,經過測試,是直接奔潰。(在不同編譯器也許實現不一樣)
最新評論