C# WriteProcessMemory-字符串长度错误

C# WriteProcessMemory-字符串长度错误,c#,winapi,C#,Winapi,目前,我正在用C编写一个游戏培训师,我只是为了好玩,为了一个私人服务器,而不是为了让游戏成为有史以来最好的玩家,它运行得很顺利,但不是字符串 当我第一次写字符串时,我有10个字符,它会工作,它会写例如:hellolady!。当我键入8个字符时,例如Hellool,它将自动写入10个字符,因此新字符串将为Helloly 我不知道我为什么会遇到这个问题,这是我的笔录: public static bool WriteString(IntPtr handle, int address, string

目前,我正在用C编写一个游戏培训师,我只是为了好玩,为了一个私人服务器,而不是为了让游戏成为有史以来最好的玩家,它运行得很顺利,但不是字符串

当我第一次写字符串时,我有10个字符,它会工作,它会写例如:hellolady!。当我键入8个字符时,例如Hellool,它将自动写入10个字符,因此新字符串将为Helloly

我不知道我为什么会遇到这个问题,这是我的笔录:

public static bool WriteString(IntPtr handle, int address, string value)
{
    int written;

    byte[] data = Encoding.Default.GetBytes(value);

    return WriteProcessMemory(handle, address, data, data.Length, out written);
}
我的WriteProcess内存:

[DllImport("Kernel32.dll")]
static extern bool WriteProcessMemory(IntPtr handle, int lpBaseAddress, byte[] lpBuffer, int nSize, out  int lpNumberOfBytesWritten);

希望有人能帮助我。

编辑有效的函数时,必须在GetBytes处使用空终止符,然后它才能工作

public static bool WriteString(IntPtr handle, int address, string value)
{
    int written;

    byte[] data = Encoding.Default.GetBytes(value + "\0");

    return WriteProcessMemory(handle, address, data, data.Length, out written);
}

10-8是2,因此您可能会将第一次写入的2个字符保留在原位。使用终止符\0或空格填充尝试在字符串末尾添加null终止符-用于此字符串的缓冲区的总大小是多少?请注意,如果要更改字符串,应重写内存中用于此字符串的整个区域。因此,如果您处理10个字符的字符串,您应该始终读取和写入整个缓冲区,全部为10个字节。如果新字符串的长度小于10字节,则只需将其填充为\0Null,这很可能是您要查找的内容。Encoding.GetBytes不添加空终止符。@user3599496请将您所做的更改作为您自己问题的答案发布,您可以在两天内接受。不要只是将其作为问题的编辑发布。这是一个不错的问题,如果能有一个好的被接受的答案,那就太好了。