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...