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

Value of char cannot be used to initialize an entity of char *

本文关键字:char 实体 初始化 不能 用于      更新时间:2023-10-16

我创建了一个线程,并将字符串作为参数发送。我需要随机打乱字符串,但这里有一个问题char *c = buffer[rand() % len + 1]。我有一个错误a value of type "char" cannot be used to initialize an entity of type "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;
}

您必须获取一个地址才能分配给char*:

char *c = &buffer[rand() % len + 1]
          ^~~~~

此外,您应该零初始化result,因为当您使用strcat时,您将附加到目标缓冲区,而未初始化的result可能不会以"\0"字符开头。这就足够了:

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

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