核心中字串釋疑

2021-05-25 15:58:55 字數 2857 閱讀 2064

**:

1.字串結構

驅動中字串有uniocde_string和ansi_string兩種結構

unicode_string定義如下:

typedef struct _unicode_stringunicode_string,*punicode_string

ansi_string定義如下:

typedef struct _stringansi_string,*pansi_string

驅動中主要都是unicode編碼字串,ansi少數場合使用。

2.字串操作rtl系列函式

★字串的初始化rtlinitunicodestring

unicode_string str;

rtlinituniocdestring(&str,l」unicodestring」);

★字串的拷貝 rtlcopyunicodestring

1.不分配記憶體字串拷貝

unicode_string dst;       //目標字串

wchar dst_buf[256];       //緩衝區

unicode_string src;       //源字串

rtlinituniocdestring(&src,l」unicodestring」);

rrlinitemptyunicodestring(&dst,dst_buf,256*sizeof(wchaar)); //把目標字串初始化為緩衝區長度為256雙字的unicode_string結構

rtlcopyunicodestring(&dst,&src);    //字串拷貝

2.動態分配記憶體拷貝

#define mem_tag 『my』    //定義記憶體分配標記

unicode_string dst=;     

unicode_string src=;        

rtlinitunicodestring(&src,l」unicodestring」);

dst.buffer=(pwchar)exallocatepoolwithtag(nonpagepool,src.length,mem_tag); //給目標字串動態分配大小

if(dst.buffer==null)

錯誤處理

dst.length=dst.maximumlength=src.length;

rtlcopyunicodestring(&dst,&src);

//記憶體洩漏問題,用完要釋放記憶體

exfreepool(dst.buffer);

dst.buffer==null;

dst.length=dst.maximumlength=0;

unicode_string dst;

dst.buffer=(pwchar)exallocatepoolwithtag(nonpagedpool,256,mem_tag);

unicode_string src;

rtlinitunicodestring(&src,l」myunicode」);

rtlcopyunicodestring(&dst,&src);

rtlinitunicodestring(&src,l」string」);

kdprint((「%wz」,&dst));

exfreepool(dst.buffer);

wchar buf[256];

unicode_string dst,src;

rtlinitemptyunicodestring(&dst,buf,256*sizeof(wchar));

rtlinitunicodestring(&src,l"myunicode");

rtlcopyunicodestring(&dst,&src);

rtlinitunicodestring(&src,l"string");

kdprint(("%wz",&dst));

3.dbgprint格式說明符

4.dbgprint函式列印字串

unicode_string src;

dbgprint(「%wz」,&src);

dbgprint(「%s」,src.buffer);

dbgprint(「%ws」,src.buffer);

不推薦使用後2個

ansi_string src;

dbgprint(「%z」,&src);

dbgprint(「%s」,src.buffer);

其他格式跟printf一樣

5.ansi_string和unicode_string轉換

rtlunicodestringtoansistring()

rtlunicodestringtoansistring()

unicode_string stc; 

ansi_string   dst; 

rtlinitansistring(&dst,」hello world!」); 

rtlansistringtounicodestring(&src,&dst,true);//需要釋放記憶體。

rtlfreeunicodestring(&src);//釋放動態分配的記憶體。

6.漢字的核心列印輸出

由於dbgprint函式遇到中文字元的unicode_string就會截斷,轉換成

ansi_string列印輸出。

unicode_string src;

ansi_string dst;

rtlinitunicodestring(&src,l」列印漢字」);

rtlunicodestringtoansistring(&dst,&src,true);

dbgprint(「%z」,&dst);

rtlfreeansistring(&dst);

核心字串

實驗任務 給你乙個長度為 n,只包含小寫字母的字串 a0a1a2 an 1 它的核心字串定義 為最短的且包含全部 26 個小寫字母的子串。這樣的子串可能沒有,也可能只有乙個,還有 可能有多個,所以你只需要輸出它的長度,如果沒有這樣的輸出 1 即可。注意 乙個字元 串 a0a1a2 an 1 的子串是...

字串的核心應用

字串有2種表示方式 單引號和雙引號!他們沒有任何區別!比如 python 和 python 是一樣的。但是我覺得組合起來用 s 你好 h 你好你好 s s 特別是sql語句中,直接輸出小學會遇到些問題,所以最用 括起來,如果用 就需要轉義 轉義 i love python 拼接 最好不要用 連線,因...

字元與字串 windows核心程式設計

1,字元編碼 utf 8 unicode transformation format unicode轉換格式 0x0080 以下的字元壓縮為1個位元組 0x0080 0x07ff 之間的字元轉換成2個位元組 0x0800 以上的字元轉換為3個位元組 對 surrogate pair 被寫為4個位元組...