Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 函数不';t返回正确的TCHAR_C++ - Fatal编程技术网

C++ 函数不';t返回正确的TCHAR

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或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);
    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);