2016-04-07 28 views
-1

öğesinin başlatılması için kullanılamaz. Bir iş parçacığı oluşturur ve bir dizeyi parametre olarak gönderir. Ve ben rasgele rastgele shuffle gerekiyor ama burada bir sorunum var char *c = buffer[rand() % len + 1]. Bir hatam var a value of type "char" cannot be used to initialize an entity of type "char *". Neden ve nasıl çözebilirim?char değeri, 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; 
} 
Sen * char atamak için bir adres almalıdır
+0

için std::string result; ve strcat(result, c); için char result[CHAR_MAX]; geçmek için tavsiye;' Char * Sonuç 'ile = yeni char [len + 1]; 'Eğer bilemezseniz, hiçbir zaman içinde 'CHAR_MAX' karakterinden daha fazla bir dize alamayacaksınız. – NathanOliver

+0

'char *', gerçekten 'const char *' olmalıdır. “Buffer” ya da “c” ye yazmayı düşünmüyorsunuz, bu yüzden de niyetinizi belgeleyebilirsiniz. Ve derleyici, hataları erkenden bulmanızda yardımcı olur. Artı, '0'ın sonu geçmiyorsa,' '' 0 ya da 1’dir. – IInspectable

cevap

4

:

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

kullandığınız zaman strcat hedef tampon eklenecek çünkü result başlatmak sıfır olmalı ve başlatılmamış result ile başlayan olmayabilir '\ 0' karakteri. Bu yeterli olacaktır: şiddetle Char sonuç [CHAR_MAX değerine] `yerini öneririz

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

... ama şiddetle result += c;