从网络数据包复制一串 wchar 时访问冲突
Access violation while copying a string of wchar from network packet
我正在编写游戏服务器,因为我在韩国,所以它使用Unicode。问题是我无法从数据包中复制 wchar 字符串。
我检查wcsncpy_s(chat, 100, inChat.c_str(), inChat.length());
这工作正常,但这样的东西不起作用。
wchar_t strId[10]; // I'm trying to copy L"player11" here.
wcsncpy_s(
strId,
10,
(WCHAR*)(buffer[2]), // buffer[0] : packet size, buffer[1] : packet type
9
);
内存视图
我检查了很多次,以找出我做错了什么,但我不知道它有什么问题。
它每次都会抛出相同的异常。
Exception thrown at 0x00007FFF20DFE5A0 (ucrtbased.dll) in SimplestMMORPG-Server.exe: 0xC0000005: Access violation reading location 0x0000000000000070.
请帮帮我...
你只需要指定从buffer
开头的偏移量,而不是试图将buffer[2]
解释为内存地址:
wcsncpy_s(
strId,
10,
(WCHAR*)(buffer + 2),
9
);
因为:鉴于buffer
被声明为 char* buffer
(或 std::byte* buffer
(,即缓冲区包含一个指向某个内存的指针(如屏幕截图所示(,buffer[2]
从缓冲区中获取第 3 个元素。 buffer[2]
的类型为 char
,而类型 char
与 wcsncpy_s
的第 3 个参数不兼容。(从内存视图中,第 3 个字节是0x70。然后0x70作为第三个参数传递给wcsncpy_s
,它期望第三个参数是内存地址,并尝试从0x70
内存地址读取,并失败,这就是错误消息被Access violation reading location 0x0000000000000070
的原因(
相反,您需要计算缓冲区内该字符串的地址,如buffer + 2
,buffer + 2
的类型为 char*
。 wcsncpy_s
期望将char*
作为第三个参数。
相关文章:
- C++为一串单词添加空格
- 为什么Visual Studio正在清除我的一串反斜杠
- 如何将内存中的位转换为一串和零?
- 如何返回一串字母数字字符中的最大值(例如-1A003B3)?
- 创建一个程序,该程序将一串数字作为输入,并输出偶数和奇数的总和
- C++ 如何对一串数字求平均值
- 从网络数据包复制一串 wchar 时访问冲突
- C - 将文本文件读为一串单词,然后将字符串分为向量
- 我如何在一串随机生成的字母I C 中查找一个单词
- 从一串数字C++创建一个数字序列
- 将一串十六进制存储到字符中
- 在另一个字符串中查找一串数字
- 将一串数字分解为26以下数字的计数方法
- 把一串单词解析成一组单词
- 将一串数字转换为整数向量 c++
- 将一串单词视为数组 (C++)
- 使用算术记数法横向排列一串字符
- 我有编译器的情况。当我运行代码来去除一串特殊字符时,它在一个编译器中运行,但在另一个编译器中不运行?
- 将一串数字转换为任何形式的整数
- 如何压缩一串数字