Visual c++ 为什么我只将汉字作为输出?

Visual c++ 为什么我只将汉字作为输出?,visual-c++,Visual C++,我有一个正在运行的程序,它连接到记事本,可以成功地读取记事本中写入的前20个字符,但如果我试图将一些字节写回Notepad.exe,它会给我很多类似于中文的字符。 也许是unicode问题? 但是我创建了一个字节数组 已尝试以字符数组和字符串的形式读写该值 BYTE text[20]; for (int i = 0; i < 20; i++) { ReadProcessMemory(han, (void*)start2, &text[i], sizeof(QWORD), 0

我有一个正在运行的程序,它连接到记事本,可以成功地读取记事本中写入的前20个字符,但如果我试图将一些字节写回Notepad.exe,它会给我很多类似于中文的字符。 也许是unicode问题? 但是我创建了一个字节数组

已尝试以字符数组和字符串的形式读写该值

BYTE text[20];
for (int i = 0; i < 20; i++) {
    ReadProcessMemory(han, (void*)start2, &text[i], sizeof(QWORD), 0);
    start2 += 2;
}
printf("%s\n", text);
字节文本[20];
对于(int i=0;i<20;i++){
ReadProcessMemory(han,(void*)start2,&text[i],sizeof(QWORD),0);
start2+=2;
}
printf(“%s\n”,文本);
预期结果:更改notepad.exe的字符串。
实际结果:字符串以我不理解的字母显示。

我猜:您正在构建Unicode版本,因此
%s
格式说明符需要
wchar\u t*
指针,但您正在传递
char*
。然后每两个字节被解释为一个Unicode字符。尝试
%hs
我想真正的问题在这里:
对于(inti=0;I<12;I++){WriteProcessMemory(han,(void*)start2,&newtext[I],sizeof(QWORD),0);printf(“%s”,newtext[I]);start2+=2;}
在您的
ReadProcessMemory
调用中存在缓冲区溢出。您一次读取8个字节,但一旦
i>12
,则
&text[i]
指向的缓冲区中的字节数少于8个。此外,每次后续读取都会覆盖上一次读取的第一个字节以外的所有字节。谢谢,我想我解决了我的问题。。它是通过使用wchar\u t代替字节数组来解决的。现在我这里有一些很好的和奇特的,只是另一个技巧,但再次感谢。