memchr()記憶體查詢字元函式:主要用於從記憶體中查詢自己需要的字元位置。
(1)函式原型:
void *memchr(const(2)標頭檔案void *_buf ,int _val,size_t _maxcount)
#include(3)功能:
在記憶體中,從第乙個變數const void *_buf給出的記憶體位址開始,以位元組為單位,按照第二個變數int _val所對應的位元組值查詢。(4)基礎例項**:如果有則返回所對應的位元組記憶體位址,如果沒有則返回null或者奔潰。
第三個變數size_t _maxcount表示查詢的最大範圍。
char a="(5)輸出情況:hello zobol!";
char c='z'
;
char*ret;
ret = (char*)memchr(a,c,strlen(a)
); printf("%c
",*ret);//
*的意思是取出位址所對應記憶體位置的值
printf("
%s",ret);//
%s是用於字串輸出,輸入乙個記憶體的位址,會自動輸出從開頭到\0的值
(6)問題1:int _val的取值範圍0~255,可以超過嗎?:
回答:不可以,int_val的值對應是一位元組二進位制0000 0000~11111111的無符號數值,不可以超過否則會發生錯誤,程式直接奔潰,不是返回空指標。一般情況下用char表示,自動強制轉換為int比較好。
例項**:
char b="";運**況:int vali = 111;//
'o'的對應ascii碼
int vali2 = 300; //
超限值
char* ret2 = (char*)memchr(b,vali,15
);
char* ret3 = (char*)memchr(b,vali2,7
); printf(
"%c\n
",*ret2);//
*的意思是取出位址所對應記憶體位置的值
printf("
%s\n
",ret2);//
%s是用於字串輸出,輸入乙個記憶體的位址,會自動輸出從開頭到\0的值
printf("
%c\n
",*ret3);//
*的意思是取出位址所對應記憶體位置的值
printf("
%s\n
",ret3);
(注意返回值,程式是直接奔潰,不是正常結束)
(7)問題2:用於字串查詢,不知道字串長度怎麼辦?
回答:用strlen()函式獲取,不能像python那樣用-1表示結尾,c語言中字串不是物件沒有被封裝。
(8)問題3:對於'\0'能查詢嗎?
回答:可以,memchr針對的是一段記憶體,而不是乙個字串,只要二進位制對於的值相等,就會返回。
(9)問題4:如果有兩個重複的字元值,在查詢範圍內,返回哪乙個?
示例**:
char c="";運**況:int valii = 111;//
'o'的對應ascii碼
char* ret4 = (char*)memchr(c,valii,strlen(c));
char* ret5 = (char*)memchr(ret4+1,valii,strlen(c));//
記憶體位址加1,跳過第乙個o
printf("
%s\n
",ret4);
printf(
"%s\n
",ret5);
(10)問題5:如果size_t _maxcount範圍超過字串長度,或者在合法範圍內沒有找到符合的字元值,會返回什麼?
回答:並不是返回空指標,經過測試,是直接奔潰。(在不同編譯器也許實現不一樣)
R語言學習之我見
作為乙個學習r語言兩年的乙個過來人,跌跌撞撞,走過一些彎路,也有一些自己方法,我認為學r語言可以這樣學習 1 環境 2 基本資料結構 向量字串 陣列矩陣 資料框因子列表表 邏輯運算 3 迴圈 for迴圈 repeat迴圈 while迴圈 4 函式 函式基本語法 遞迴函式 管道函式 5 基本視覺化繪圖...
C語言學習之我見 strcpy 字串複製函式
strcpy 函式,用於兩個字串值的複製。1 函式原型 char strcpy char dest,const char source 2 標頭檔案 string.h 3 功能 將從const char source到 0 結尾的字串 包括 0 複製到char dest 所指的字串處。返回值char...
C語言學習之我見 strlen 字串長度函式
strlen 函式,負責給出字串的長度。注意是字串的長度,不是字元陣列的長度。1 函式原型 size t cdecl strlen const char str 2 標頭檔案 include 3 功能 返回從給出陣列開頭的記憶體位址開頭const char str到 0 的長度 不包括 0 4 基礎...