首頁>技術>

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範圍超過字串長度,或者在合法範圍內沒有找到符合的字元值,會返回什麼?

  回答:並不是返回空指標,經過測試,是直接奔潰。(在不同編譯器也許實現不一樣)

8
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 從零開始搭建HTTPS服務