2016-04-07 1 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

std::string result;strcat(result, c);char result[CHAR_MAX];を切り替えるために、あなたをお勧め:これは十分ですあなたがあなたの中に 'CHAR_MAX'文字以上の文字列を得ることは決してないと分からない限り、新しいchar [len + 1]; – NathanOliver

+0

あなたの 'char *'は本当に 'const char *'でなければなりません。あなたは 'buffer'か' c'のどちらにも書くつもりはないので、文書の意図を書いているかもしれません。また、コンパイラが早い段階でバグを見つけられるようにしてください。さらに、 'len'が0または1でない限り、' result'の終わりを過ぎて書いています。 – IInspectable

答えて

4

あなたはchar *に割り当てるためのアドレスを取る必要があります。

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

も、あなたがstrcatを使用するときに、宛先バッファに追加されますので、resultを初期化ゼロ、および初期化されていないresultべきではと開始されない場合があります'\ 0'文字。 = `のchar *の結果で`;

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

を...しかし、私は強く、私は強くあなたが `char型の結果[CHAR_MAX]を置き換える提案result += c;

関連する問題