我正在尝试使用beginthreadex创建一个线程,该线程将运行一个以char作为参数的函数。不过我对C ++很擅长,而且我无法弄清楚如何将一个char变成一个const char ,这是一个beginthreadex需要它的参数。有没有办法做到这一点?我发现很多关于将char转换为const char 的问题,而不是const char *。
答案 0 :(得分:10)
char a = 'z';
const char *b = &a;
当然,这是在堆栈上。如果你在堆上需要它,
char a = 'z';
const char *b = new char(a);
答案 1 :(得分:0)
如果函数需要一个指向现有字符的const指针,那么你应该选择Paul Draper的答案。但请记住,这不是指向空终止字符串的指针,该函数可能会发生什么。如果需要指向空终止字符串的指针,可以使用std::string::c_str
f(const char* s);
char a = 'z';
std::string str{a};
f(str.c_str());
答案 2 :(得分:0)
由于你没有显示任何代码,因此很难确切地知道你想要什么,但是这里有一种方法来调用一个函数,期望一个char作为一个线程中的参数。如果你不能改变转换参数本身的函数,你需要一个trampoline函数坐在中间做这个并调用实际的函数。
#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;
}