C++ 函数不';t返回正确的TCHAR
我正在尝试创建一个只返回TCHAR或LPCWSTR的函数,但我无法处理它,不知道为什么 我的代码如下所示:C++ 函数不';t返回正确的TCHAR,c++,C++,我正在尝试创建一个只返回TCHAR或LPCWSTR的函数,但我无法处理它,不知道为什么 我的代码如下所示: TCHAR MainClass::GetString(){ if (hWnd == NULL) return NULL; TCHAR name[256]; GetWindowText(hWnd, name, 256); MessageBox(NULL, (LPCWSTR)(name), L"Testing this!", MB_OK);
TCHAR MainClass::GetString(){
if (hWnd == NULL)
return NULL;
TCHAR name[256];
GetWindowText(hWnd, name, 256);
MessageBox(NULL, (LPCWSTR)(name), L"Testing this!", MB_OK);
return name[256];
}
如果我运行这段代码,它会显示一个messagebox,就像我想要的一样,带有正确的消息,但是返回的是一个空白字符串
如果我尝试返回LPCWSTR,它也会返回空白,我在这里做错了什么
--
编辑
函数将返回一个
TCHAR
,它将是单个char
或单个wchar\t
,具体取决于是否定义了UNICODE
语句returnname[256]
返回的是距name
数组开头256偏移量处的单个字符。这意味着您将返回一个TCHAR
,它是数组末尾的一个。这就是为什么您没有得到预期的字符串
您不能声明自动堆栈变量并从函数返回指向它的指针——当函数退出时,它将超出范围
您可能想malloc()
您的字符串,返回一个TCHAR*
,然后在调用函数中释放它。
std::basic_string<TCHAR> MainClass::GetString()
{
TCHAR name[256] = {0};
int len = GetWindowText(hWnd, name, 256);
return std::basic_string<TCHAR>(name, len);
}
你想还什么?一根绳子?或者一个字符?
返回名称[256]代码>使用返回名称代码>如果要返回字符串。@KasiyA使用返回名称
不应返回局部变量的地址。@KasiyA:但返回指向局部变量的指针是不正确的。在调用者可以使用指针之前,变量将在退出时超出范围。@user3649005-您已从煎锅跳入火中。不需要引入MalCube(),尤其是在C++程序中。你有丰富的选项——字符串变量(即std::wstring
,std::string
)加上一些低技术选项,例如简单地将数组包装在结构中并返回结构。刚刚编辑了我的文章。如果我输入这个代码,我只会得到一些随机字符。没有比我的绳子更好的了。任何提示?@ USS3649005的“提示”是开始使用C++并使用字符串类。您正确地执行了MALOC,但是您不将字符串从GetWindowText复制到用MALOC分配的缓冲区。所以你看到了内存中的垃圾。谢谢你,伙计:)现在我用这种方式,它工作得很好(LPCWSTR)name.c_str()@user3649005-你为什么要选LPCWSTR?不应该有任何铸造。去掉强制转换——如果删除该强制转换后出现编译器错误,那么它就不能正常工作。@PaulMcKenzie没有LPCWSTR它也能正常工作,谢谢,我现在注意到了!
std::basic_string<TCHAR> MainClass::GetString()
{
TCHAR name[256] = {0};
int len = GetWindowText(hWnd, name, 256);
return std::basic_string<TCHAR>(name, len);
}
std::basic_string<TCHAR> MainClass::GetString()
{
int len = GetWindowTextLength(hWnd);
if (len == 0) return std::basic_string<TCHAR>();
std::vector<TCHAR> name(len+1);
len = GetWindowText(hWnd, &name[0], name.size());
return std::basic_string<TCHAR>(&name[0], len);
}
std::basic_string<TCHAR> name = GetString();
int MainClass::GetString(LPTSTR name, int maxlen)
{
return GetWindowText(hWnd, name, maxlen);
}
TCHAR name[256];
int namelen = GetString(name, 256);