2016-04-07 226 views
-1

我创建一个线程并发送一个字符串作为参数。我需要随机洗牌,但我在这里遇到问题char *c = buffer[rand() % len + 1]。我有一个错误a value of type "char" cannot be used to initialize an entity of type "char *"。为什么以及如何解决它?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; 
} 
+0

我强烈建议你更换'字符结果[CHAR_MAX]'和'字符*结果=新的char [len + 1];'除非你知道你永远不会得到一个字符串中含有超过'CHAR_MAX'的字符。 – NathanOliver

+0

你的'char *'应该也是'const char *'。你不打算写入'buffer'或'c',所以你不妨写文档意图。并让编译器帮助您尽早发现错误。另外,除非'len'是0或1,否则你正在写'result'结尾。 – IInspectable

回答

4

你必须采取的地址分配为char *:

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

你也应该零初始化result,因为当你使用strcat你会附加到目标缓冲区,并初始化result可能不会启动'\ 0'字符。这应该足够了:

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

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

相关问题