2014-02-08 5 views
0

Я пытаюсь прочитать строку из меню, как это:GetMenuString возвращает пустую строку

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

Выход:

Buffer= , Length=11 

Что случилось с этим кодом, метод возвращает правильный ненулевую длину , но пустая строка?

ответ

2

Четвертый аргумент должен быть размером с буфер. Попробуйте переписывания, как

char buf[100]; 

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

Передавая 0, так как размер буфера GetMenuString просто возвращает длину строки, так что это сделал именно то, что вы сказали, что это сделать. :-)

Делитесь и наслаждайтесь.

+0

Мне нужно спать), это смешно. – Conker

1

Из документации: http://msdn.microsoft.com/en-us/library/windows/desktop/ms647983(v=vs.85).aspx

Вам необходимо предоставить выделенный буфер с максимальной длиной, указанной в параметре максимального счета. Вы указали на функцию, что этот максимальный счет равен 0.

Вам необходимо предоставить буфер для текста, который нужно скопировать.

char buff[255]; 
int retlen = GetMenuString(menu, IDM_BLABLA, buf, 255, 0); 
Смежные вопросы