2016-04-07 223 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;

相關問題