C ++将char转换为const char *

时间:2013-12-13 07:30:20

标签: c++ pointers char

我正在尝试使用beginthreadex创建一个线程,该线程将运行一个以char作为参数的函数。不过我对C ++很擅长,而且我无法弄清楚如何将一个char变成一个const char ,这是一个beginthreadex需要它的参数。有没有办法做到这一点?我发现很多关于将char转换为const char 的问题,而不是const char *。

3 个答案:

答案 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;
}