私は、cstringを単語の配列に分割する関数を作成しようとしています。例えば。私が "Hello world"で送信すると、1位に要素 "Hello"、2番目の "world"がある2つの場所の配列が得られます。私はセグメンテーションフォルトを取得していると私は私の人生のために間違っているように思うことができない。 forループIは、(間隔が単語の数= N、常にN-1)合計であるどのように多くの単語決定する、あるどのように多くのスペースを確認していでは文字列をCの単語の配列に分割する
。次に、カウンタに1を加算するようにプログラムに指示します(N-1のため)。
私は個々の単語は、私はここにカウンタ+ 1が必要かどうかわからない区切られた各保つために*配列[] charとして宣言し(なぜなら\ 0のを?)
これは、トリッキーな部分が入ります。私はstrtokを使って各単語を区切ります( ""を使用)。次に、char * array []の各位置をmallocして、単語を格納するのに十分なメモリを確保します。中に入れるワードがなくなるまで、これが行われます。
誰かが私にセグメンテーション違反の原因となっている一部のヒントを与えることができれば、私はそれを本当に感謝します!
void split(char* s){
int counter = 0;
int pos = 0;
for(int i=0; s[i]!='\0'; i++){
if(s[i] == ' '){
counter ++;
}
}
counter += 1;
char* array[counter+1];
char *token = strtok(s, " ");
while(token != NULL){
array[pos] = malloc(strlen(token));
strcpy(array[pos], token);
token = strtok(NULL, " ");
pos++;
}
malloc(strlen(トークン)+1) ' – BLUEPIXY
どこで失敗するかを見つけるために、a)デバッガの下で実行する、b)valgrindを使う(linux ) – pm100
c)正気な人のようにprint文を追加するだけです –