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
结尾的内容。