C++ char的值不能用于初始化char的实体*

C++ char的值不能用于初始化char的实体*,c++,C++,我创建一个线程并发送一个字符串作为参数。我需要随机洗牌字符串,但这里有个问题char*c=buffer[rand()%len+1]。我遇到一个错误类型为“char”的值不能用于初始化类型为“char*”的实体。为什么以及如何解决它 DWORD WINAPI secondThread(LPVOID lpParam) { char *buffer = (char*)lpParam; size_t len = strlen(buffer); char result[CHAR_

我创建一个线程并发送一个字符串作为参数。我需要随机洗牌字符串,但这里有个问题
char*c=buffer[rand()%len+1]
。我遇到一个错误
类型为“char”的值不能用于初始化类型为“char*”的实体
。为什么以及如何解决它

DWORD WINAPI secondThread(LPVOID lpParam) {
    char *buffer = (char*)lpParam;
    size_t len = strlen(buffer);

    char result[CHAR_MAX];
    char *c = buffer[rand() % len + 1];
    int i = 0;

    while (i < len) {
        strcat(result, c);
        i++;
    }

    cout << result << endl;

    return 0;
}
DWORD WINAPI第二线程(LPVOID lpParam){
char*buffer=(char*)lpParam;
大小长度=strlen(缓冲区);
字符结果[char_MAX];
char*c=缓冲区[rand()%len+1];
int i=0;
而(我cout您必须获取分配给char*的地址:

char *c = &buffer[rand() % len + 1]
          ^~~~~
此外,您还应将初始化
结果
归零,因为当您使用
strcat
时,您将附加到目标缓冲区,而未初始化的
结果
可能不会以“\0”字符开头。这应该足够了:

char result[CHAR_MAX];
result[0] = '\0';

…但我强烈建议您将
char result[char_MAX];
切换到
std::string result;
strcat(result,c);
切换到
result+=c;

我强烈建议您将
char result[char_MAX];
替换为
char*result=new char[len+1]
除非你知道你永远不会得到一个超过
CHAR\u MAX
字符的字符串。你的
CHAR*
也应该是
const CHAR*
。你既不想写入
缓冲区
也不想写入
c
,所以你最好记录意图。让编译器帮助你尽早发现bug。另外,除非
len
为0或1,否则您正在写入超过
result
结尾的内容。