0

我的动态分配的变量用 SecureZeroMemory 修整,然后 ReadFile 用一个短的 5char 字符串和一堆剩余的方块填充它。问题是字符串末尾的垃圾字符:

“电机驱动器”

ReadFile 的 lpNumberOfBytesRead 参数显示字符串是 10 个字符,可能是因为它是 Unicode?

有人可以帮我看看如何删除这些尾随的垃圾字符吗?是否有像 ZeroMemory 这样的功能可以清除它们?

TCHAR *sIncoming;
sIncoming = (TCHAR *) malloc(sizeof(TCHAR) * 4096 +  sizeof(TCHAR));
RtlZeroMemory(sIncoming ,sizeof(sIncoming));

// (a string array with no characters in it: "")

bSuccess = ReadFile(hPipe,sIncoming ,BUFSIZE*sizeof(TCHAR),&dwBytesRead,NULL);

// Now the string array has the incoming string plus extra characters in it: 
//    "motor췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍"

free(sIncoming);

谢谢!

4

2 回答 2

0

sizeof(sIncoming) 是指针的大小。你想要 sizeof(TCHAR) * 4097。或者只是使用 calloc。

于 2011-03-03T17:06:11.603 回答
0

零终止(当然调用成功ReadFile后):

sIncoming[dwBytesRead/sizeof(TCHAR)] = 0;

注意:遵守缓冲区限制。

完整拼接到你的代码中:

#define BUFSIZE 4096
TCHAR *sIncoming;
sIncoming = (TCHAR *) malloc(sizeof(TCHAR)*BUFSIZE+sizeof(TCHAR));
bSuccess = ReadFile(hPipe,sIncoming ,BUFSIZE*sizeof(TCHAR),&dwBytesRead,NULL);
if(bSuccess)
  sIncoming[dwBytesRead/sizeof(TCHAR)] = 0;
free(sIncoming);

编辑:删除了RtlZeroMemory调用,因为它不是绝对必要的。只需确保以零终止接收到的 C 字符串。

于 2011-03-03T17:08:41.903 回答