Здравствуйте! Насколько правильна данная функция по получению имени пользователя с точки зрения выделения и чистки памяти? Нужно ли чистить память и могут ли быть какие то проблемы с данным кодом? Необходимо использовать чистый winapi, так что, std::string не вариант.
bool getCU(LPTSTR* usrBuf) {
DWORD usrLen = (sizeof(usrBuf)/sizeof(*usrBuf))+1;
if (GetUserName((LPTSTR)usrBuf, &usrLen)) return true; else return false;
}
LPTSTR User[UNLEN+1];
if (getCU(User)) MessageBox(0, (LPCTSTR)User, L"", 0);
Я правильно понимаю, что я передаю функции getCU указатель на LPTSTR массив который хранится в не самой функции? Это правильный подход?
Функция совершенно бессмысленная.
Применять прием sizeof(usrBuf)/sizeof(*usrBuf)
к указателю никакого смысла нет. Этот прием работает только с массивами, а не с указателями.
Почему передается LPTSTR* usrBuf
? Указатель на указатель? При чем здесь указатель на указатель?
Переданный указатель на указатель LPTSTR* usrBuf
силой приводится к типу LPTSTR
? Это бессмысленно.
LPTSTR User[UNLEN+1]
- это массив указателей. Что вы хотели этим сказать? Зачем вам понадобился массив указателей? И какой смысл передавать этот массив указателей в MessageBox
, силой приведя его к LPTSTR
?
Если вы пишете ваш код в терминах T
-типов-"первертышей" (LPTSTR), то тогда уж придерживайтесь этого правила везде. Т.е. не L""
, а _T("")
.
В общем код бессмыслен. В некоей изначальной форме он, очевидно, порождал простыню сообщений об ошибках от компилятора. Эти сообщения были "задушены" расстановкой явных приведений типа. Код от этого стал еще более бессмысленным.
bool getCU(LPTSTR usrBuf, DWORD usrLen)
{
return GetUserName(usrBuf, &usrLen);
}
...
TCHAR User[UNLEN+1];
if (getCU(User, sizeof User / sizeof *User))
MessageBox(0, User, _T(""), 0);
Но в чем вообще заключается идея? Зачем писать некую функцию-оболочку getCU
, которая фактически ничего не делает, кроме вызова GetUserName
?
typedef std::basic_string<TCHAR> tstring;
tstring getCU()
{
TCHAR usrBuf[UNLEN+1];
DWORD usrLen = sizeof usrBuf / sizeof *usrBuf;
if (!GetUserName(usrBuf, &usrLen))
usrBuf[0] = 0;
return tstring(usrBuf);
}
...
tstring User = getCU();
if (!User.empty())
MessageBox(0, User.c_str(), _T(""), 0);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте, нужно переделать данную функцию, так, что б вместо подпоследовательности char, она проверяла подпоследовательность int:
Есть приложение UWP (C#),которое отображает текущую погоду и ее прогноз, с самым простым функционалом
Нужна помощь с анимацией на DirectX