2017-04-18 4 views
0

文字列を入力としてマルチスレッドプログラムを作成しようとしています。それは完全に正常に動作しますが、私は(例えば"123"など、直接ではなく数123)文字列に整数を入れるたびSDL_threadを文字列パラメータで作成する

#include <stdio.h> 
#include <string> 
#include <SDL_thread.h> 

int threadFunction(void* data) { 
    std::string* parameter = static_cast<std::string *>(data); 
    printf("Thread data: %s\n", parameter); 
    return 0; 
} 

int main(int argc, char const *argv[]) { 
    SDL_Thread* threadID = SDL_CreateThread(threadFunction, "test", (void*)"Enter string here"); 
    SDL_DetachThread(threadID); 
    return 0; 
} 

、その後の解析を試みる:SDL_CreateThreadを使用して、私はそうのような単純な実装を構築しようとしました整数のスレッドでは、私はSegmentation Fault: 11を取得します。私の試みはint i = std::stoi(parameter->c_str());

誰でも説明できますか? void*からキャストする必要がありますか?

答えて

4

まず、文字配列(void*)"Enter string here"のポインタをスレッドパラメータとして渡し、このポインタを文字列static_cast<std::string *>(data)へのポインタにキャストします。 :: std :: stringはクラスであり、条件なしでこのようなキャストを実行することは許容されます。また、printf("Thread data: %s\n", parameter)が文字列ではなくcharの配列を指しているため、エラーを爆発させない場合、暗黙的に文字列へのポインタを文字配列へのポインタにキャストします。

int threadFunction(void* data) { 
const char * parameter = static_cast< const char * >(data); // correct cast 
+0

ありがとうございました...私は誤って文字列だったので、 'std :: string'を使用しなければならないと思いました。 –

関連する問題