0

文字列を配列に分割するのに助けが必要です。情報を保存せずにトークンを印刷するだけで動作するようになりました。しかし、このプログラムでは、strtok が作成したトークンを保存し、バイナリ検索を使用して、それぞれが異なる配列からの 2 つの要素で strncmp を実行する必要があります。

./file "入力例: 'Cause I'm Batman"

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

int main(int argc, char *argv[])
{
  char delims[] = " ";
  char *result = NULL;

  int i = 1;
  int j = 0;

  char sent[1000];
  result = strtok(argv[1], delims);
  sent[0] = *result;
  while(result != NULL)
  {
    result = strtok(NULL, delims);
    sent[i] = *result;
    i++;
  }

  while(j < i)
  {
    printf(" %p\n", &sent[j]);
    j++; //Forgot to add it in first time around
  }
return 0;
}

問題は、セグメンテーション違反が発生していて、トークンを配列に格納できないようで、その理由がわかりません。ポインターの問題ですか?互換性のないデータ型を渡しますか? 他の何か?

編集:出力が必要:「例」「入力:」「原因」「私は」「バットマン」

どんな助けでも素晴らしいでしょう。

4

3 に答える 3

1

あなたの場合、クラッシュの原因を突き止めるのは非常に簡単ですNULL。ポインターを逆参照します。

*resultwhen resultisという表現がどうなるか、少し考えてみてくださいNULL


また、デバッガーを使用した場合、このエラーを見つけるのに 1 分もかかりませんでした。プログラムがクラッシュした場合、プログラマーの最初の本能は、常にデバッガーでプログラムを実行することです。

于 2013-05-27T07:15:26.307 に答える
0

このように修正

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

int main(int argc, char *argv[]){
    char delims[] = " ";
    char *result = NULL;
    int i = 0, j;
    char sent[1000];
    char *parray[32];//32 word

    strcpy(sent, argv[1]);//strtok destory string, argv[n] is read only.
    result = strtok(sent, delims);
    parray[i++] = result;
    while(NULL!= (result=strtok(NULL, delims))){
        parray[i++] = result;
    }

    for(j=0; j < i;++j)
        printf("%s\n", parray[j]);
    return 0;
}
于 2013-05-27T08:39:16.520 に答える