2017-11-24 9 views
0

私の関数save_wordsは、armazenaとsizeを受け取ります。 Armazenaは段落を含む動的配列であり、配列のサイズです。この関数では、単語と呼ばれる他の動的配列に単語を入れたい。私はそれを実行すると、クラッシュします。 私はあなたの助けに感謝します。C言語 - >段落と単語を区切る

char **save_words(char **armazena, int *size) 
{ 
    char *token = NULL; 
    char** armazena_aux = armazena; 
    int i, count=0; 
    char **words = (char**) malloc(sizeof(char*)*(10)); 
    for(i=0; i<size; i++) 
    { 
     token = strtok(*(armazena+i)," .?!,"); 
     while(token != NULL) 
     { 
      int tam = strlen(token); 
      armazena[count] = (char*) malloc(tam+2); 
      strcpy(armazena[count],token); 
      armazena[count][tam+1]='\0'; 
      count++; 
      token = strtok(NULL, " .?!,"); 

      if (count%10==0) 
      { 
       words = realloc(words, sizeof(char*)*(count + 10)); 
      } 
     } 
    } 
    return words; 
} 
+5

"それはクラッシュします" - デバッガを使用します。 –

+3

for(i = 0; i sjsam

+0

'save_words'を呼び出すコードに問題があるかもしれません。 –

答えて

0

armazena[count] = (char*) malloc(tam+2);は何ですか?私はwords[count] = ...;と思ったでしょう。 armazena [0]をstrtokに巻き上げるので、最初の外側ループはOKですが、複数の単語が含まれている場合は、外側ループを通る2回目は最初から生成された文字列を処理します。 さらに、最初の文字列にarmazenaベクトルが対応できる以上の単語が含まれていると、あなたは何かを壊すでしょう...

関連する問題