|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
- TCHAR szname[50] = _T("物理");
- TCHAR szfriend[] =_T("化学数学");
-
- CopyMemory(szname+4, szfriend,8); //复制内存数据
- /*
- 参数1:PVOID Destination 要复制内存块的目的地址
- 参数2:CONST VOID *Source 要复制内存块的源地址
- 参数3:SIZE_T Length 指定要复制内存块的大小,单位为字节
- 没有返回值
-
- */
- OutputDebugString(szname);
复制代码
我的问题:OutputDebugString(szname) 只是输出物理,化学数学 没有复制进去 ?
对不起,我在之前的回答中可能没有清楚地解释。TCHAR szname[50] = _T("物理"); 这行代码中,虽然你为 szname 分配了 50 个字符的空间,但实际上你只使用了其中的两个字符来存储 "物理",并且还有一个字符用于存储字符串的结束符 '\0'。所以,实际上你只使用了 3 个字符的空间。
当你执行 CopyMemory(szname + 4, szfriend, 8); 这行代码时,你试图从 szname 的第五个字符位置开始复制 "化学数学"。由于 TCHAR 是一个宽字符类型(在 Unicode 编译选项下),每个字符占用两个字节,所以你实际上复制了 4 个字符(8 个字节)到 szname 的第五个字符位置。
这就是为什么你没有看到 "化学数学" 被复制到 szname 中的原因。你应该将 CopyMemory 的第三个参数(复制的字节数)更改为 szfriend 的实际字节数,而不是固定的 8。你可以使用 sizeof(szfriend) 来获取 szfriend 的实际字节数。
所以,你的代码应该修改为:
- TCHAR szname[50] = _T("物理");
- TCHAR szfriend[] = _T("化学数学");
- CopyMemory(szname + 2, szfriend, sizeof(szfriend)); // 复制整个 szfriend 数组的内容
- OutputDebugString(szname);
复制代码
这样,你就能够正确地将 "化学数学" 复制到 szname 数组中,并且能够正确地输出整个字符串 "物理化学数学"。
|
|