字串拷貝,連線,列印

2021-07-03 17:05:46 字數 1781 閱讀 8126

1.字串拷貝

unicode_string並不保證buffer中的字串是以空結束的。所以使用wcscpy來拷貝字串是不行的。

unicode_string可以使用rtlcopyunicodestring來進行拷貝。

unicode_string dst;//目標字串

wchar dst_buf[256];

unicode_string src = =rtl_const_string(l"my souce string!");

// thertlinitemptyunicodestringmacro initializes an empty counted unicode string.

//把目標字串初始化為擁有緩衝區長度為256的unicode_string空字串

rtlinitemptystring(dst, dst_buff, 256*sizeof(wchar));

rtlcopyunicodestring(&dst, &src);

2.字串連線

if(satrus != status_success)

... ...

3.字串列印

如果對c語言熟悉會使用sprintf,這個函式的寬字元版本為swprintf。該函式在驅動開發中依然可以使用,但不安全,為軟建議使用

rtlstringcbprintfw來代替它。rtlstringcbprintfw需要包含標頭檔案ntstrsafe.h,在連線的時候,還需要連線庫ntsagestr.lib

status =rtlstringcbprintfw(

dst->buffer, 512*sizeof(wchar), l"filepath = %wz file size = %d \r\n",&file_path, file_size);

dst->length = wcslen(dst->buffer)*sizeof(wchar);

說明:unicode_string類似的指標,用%wz列印可以列印出字串,在不能保證字串為空字串的時候,必須避免使用%ws後者s%。

另外,常見的輸出列印,printf函式只有在有控制台輸出的情況下才有意義,在驅動中沒有控制台,但是windows核心中擁有除錯資訊輸出機制,可以使用windbg檢視列印的除錯資訊。

驅動程式中可以使用dbgprint函式來列印除錯資訊。這個函式的使用和printf基本相同,但是格式字串要使用寬字元。dbgprintf()的乙個缺點在於,發行版本的驅動程式往往不希望附帶任何輸出資訊,只有除錯版才需要除錯資訊。但是dbgprint()無論是發行版還是除錯版編譯都會有效,為此可以自己定義乙個巨集:

#if dbg

kdprint(a) dbgprint ##a

#else

kdprint(a)

#endif

不過這樣做的後果是,由於kdprint只支援乙個引數,因此必須把bbgprint的所有引數都刮起來當做乙個引數傳入。

status = kdprint( (

l"file path = %wz file size = %d \r\n",

&file_path, file_size));

這個巨集沒有必要自己定義,wdk包中已有,所以   可以直接使用kdprint來代替dbgprint取得更方便的效果。

tieto字串拷貝

c實現記憶體拷貝以及字串拷貝函式 摘 收藏 i nclude i nclude i nclude void memmove kk void dest,const void src,size t count char strcpy kk char strdest,const char strsrc i...

字串拷貝函式

1.strcpy函式 顧名思義字串複製函式 一般函式原型實現方式 該函式的引數是字元指標,也就是可以是字串變數和字元陣列,因為它們的變數名代表首字元位址。字串預設有乙個null結束符,字元陣列沒有。所以此處需要注意 因為src要求有null結束符,所以字元陣列的長度必須大於等於src包含null結束...

snprintf拷貝字串

函式原型 int snprintf char dest,size t n,const char fmt,函式說明 最多從源串中拷貝n 1個字元到目標串中,然後再在後面加乙個0。所以如果目標串的大小為n的話,將不會溢位。函式返回值 若成功則返回存入陣列的字元數,若編碼出錯則返回負值。include i...