字符串操作

3.1.2 字符串的初始化
UNICODE_STRING只含有一个指针,并没有字符串缓冲空间,下面的用法把str.Buffer传递给wcscpy作为目标缓冲区,会引发空指针异常

//把str变量清空
UNICODE_STRING str = {0};
//试图把字符串拷贝到新定义的字符串结构里面
wcscpy(str.Buffer,L"my first string!");

初始化UNICODE_STRING变量的正确例子
1.正确的做法是为str.Buffer指定缓冲区,例如

UNICODE_STRING str = {0};
WCHAR strBuf[128] = {0};
str.Buffer = strBuf;
wcscpy(str.Buffer,L"my first dstring!");
str.Length = str.MaxinumLength = wcslen(L"my first string")*sizeof(WCHAR);

2.这个下面的方法也是对的

UNICODE_STRING str;
str.Buffer = L"my first string !";
str.Length = str.MaxinumLength = wcslen(L"my first string")*sizeof(WCHAR);

3.用RTL函数初始化超级简单

UNICODE_STRING str = {0};
RtlInitUnicodeString(&str,L"my first string!");

3.1.2 字符串的拷贝

//目标字符串
UNICODE_STRING dst;
//定义缓冲区(暂时先不分配内存)
WCHAR dst_buf[256];
//这是个初始化常数字符串常用的宏
UNICODE_STRING src = RTL_CONSTANT_STRING(L"my source string!");
//把目标字符串初始化为拥有缓冲区长度为256的unicode_string空串(新书上写错了,写成长度为0了,老书天书夜读上面是对的
)
RtlInitEmptyUnicodeString(&dst,dst_buf,256*sizeof(WCHAR));
//拷贝字符串
RtlCopyUnicodeString(&sat,&src);

3.1.3 字符串的连接

NTSTATUS status;
//目标字符串
UNICODE_STRING dst;
//定义缓冲区(暂时先不分配内存)
WCHAR dst_buf[256];
//这是个初始化常数字符串常用的宏
UNICODE_STRING src = RTL_CONSTANT_STRING(L"my source string!");
//把目标字符串初始化为拥有缓冲区长度为256的unicode_string空串(新书上写错了,写成长度为0了,老书天书夜读上面是对的
)
RtlInitEmptyUnicodeString(&dst,dst_buf,256*sizeof(WCHAR));
//拷贝字符串
RtlCopyUnicodeString(&sat,&src);
status = RtlAppendUnicodeToString(
&dst,L"my second string!");

3.1.3 字符串的打印

//生成包含文件大小和路径的字符串
#include <ntstrsafe.h>
//文件路径长度不设限,应该动态分配内存,还不会分配内存,暂时用把内存空间定义在局部变量的方式代替
WCHAR dst_buf[512] = {0};
UNICODE_STRING dst;
NTSTATUS status;
UNICODE_STRING file_path=RTL_CONSTANT_STRING(L"\\??\\c:\\winddk\\7600.16385.1\\inc\\cifs.h");
USHORT file_size=1024;
//初始化一个空字符串,缓冲区长度为*sizeof(WCHAR)
RtlInitEmptyUnicodeString(&dst,dst_buf,521*sizeof());
//调用RtlStringCbprintfw打印
status = RtlStringCbPrintfw(dst.Buffer,512*sizeof(WCHAR),L"file path = %wZ file size = %d \r\n",&file_pathe,file_size);
dst.Length = wcslen(dst.Buffer)*sizeof(WCHAR);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值