C++将char转换为const char*

10

我正在尝试使用beginthreadex创建一个线程来运行需要char参数的函数。然而,我的C++不好,在将char转换为beginthreadex所需的const char时无法解决问题。有没有方法可以实现这一点?我发现很多人提问如何将char转换为const char,但是没有针对const char *的解答。


你可以将 char * 隐式转换为 const char *。不需要进行任何操作。 - asveikau
@asveikau:这并不能帮助你将一个 char 值传递给需要指针的东西。 - Mike Seymour
根据文档(http://msdn.microsoft.com/en-us/library/kdzttdcb.aspx),`beginthreadex` 需要一个 void* - dalle
3个回答

12
char a = 'z';
const char *b = &a;

当然,这是在堆栈上的。如果你需要它在堆上,

char a = 'z';
const char *b = new char(a);

这个问题涉及到C++,所以你可能想使用new - filmor

1
如果函数需要一个指向现有字符的常量指针,则应使用Paul Draper的答案。但请记住,这不是指向空终止字符串的指针,而该函数可能期望这样的指针。如果您需要指向空终止字符串的指针,则可以使用std::string::c_str
f(const char* s);

char a = 'z'; 
std::string str{a};
f(str.c_str());

0

由于您没有展示任何代码,很难确切地知道您想要什么,但是这里有一种方法可以在线程中调用一个期望 char 类型参数的函数。如果您无法更改函数本身来转换参数,则需要一个跳板函数来充当中间人来完成这个任务并调用实际函数。

#include <Windows.h>
#include <process.h>
#include <iostream>

void ActualThreadFunc(char c)
{
    std::cout << "ActualThreadFunc got " << c << " as an argument\n";
}

unsigned int __stdcall TrampolineFunc(void* args)
{
    char c = *reinterpret_cast<char*>(args);
    std::cout << "Calling ActualThreadFunc(" << c << ")\n";
    ActualThreadFunc(c);
    _endthreadex(0);
    return 0;
}

int main()
{
    char c = '?';
    unsigned int threadID = 0;
    std::cout << "Creating Suspended Thread...\n";
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &TrampolineFunc, &c, CREATE_SUSPENDED, &threadID);
    std::cout << "Starting Thread and Waiting...\n";
    ResumeThread(hThread);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    std::cout << "Thread Exited...\n";

    return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接