GetMenuString返回空字符串

时间:2014-02-08 18:31:34

标签: c winapi

我正在尝试从菜单中读取字符串,如下所示:

char* buf;
int retLength = GetMenuString(menu, IDM_BLABLA, buf, 0, 0);
pclog("Buffer= %s, Length=%i\n", buf, retLength);

输出结果为:

Buffer= , Length=11

这段代码有什么问题,该方法返回正确的非零长度,但是空字符串?

2 个答案:

答案 0 :(得分:2)

第四个参数应该是缓冲区的大小。尝试重写为

char buf[100];

int retLength = GetMenuString(menu, IDM_BLABLA, buf, 100, 0);
pclog("Buffer= %s, Length=%i\n", buf, retLength);

通过传入0,因为缓冲区GetMenuString的大小只返回字符串的长度,所以它正是你告诉它做的。 : - )

分享并享受。

答案 1 :(得分:1)

来自文档:http://msdn.microsoft.com/en-us/library/windows/desktop/ms647983(v=vs.85).aspx

您需要提供一个分配的缓冲区,其中包含max count参数中指定的最大长度。您已向函数表明该最大计数为0

您需要为要复制的文本提供缓冲区。

char buff[255];
int retlen = GetMenuString(menu, IDM_BLABLA, buf, 255, 0);