0

プログラムを実行すると、エラー セグメンテーション エラー (コア ダンプ) が発生し続けます。

#include<stdio.h>
#include<stdlib.h>
    int nextword(char *str);

    int main(void)
    {
      char str[] = "Hello! Today is a beautiful day!!\t\n";
      int i = nextword(str);
       while(i != -1)
         {
          printf("%s\n",&(str[i]));
          i = nextword(NULL);
          }
      return 0;
      }

    int nextword(char *str)
    {
      // create two static variables - these stay around across calls
      static char *s;
      static int nextindex;
      int thisindex;
      // reset the static variables
      if (str != NULL)
        {
          s = str;
          thisindex = 0;
          // TODO:  advance this index past any leading spaces
          while (s[thisindex]=='\n' || s[thisindex]=='\t' || s[thisindex]==' ' )
        thisindex++;

        }
      else
        {
          // set the return value to be the nextindex
          thisindex = nextindex;
        }
      // if we aren't done with the string...
      if (thisindex != -1)
        {
          nextindex = thisindex;
          // TODO: two things
          // 1: place a '\0' after the current word
          // 2: advance nextindex to the beginning
          // of the next word
          while (s[nextindex] != ' ' && s[nextindex] != '\0')
        nextindex++;

          str[nextindex] = '\0';
          nextindex++;
        }
      return thisindex;
    }

このプログラムの目的は、文字列 str[] 内の各単語をコンソールの新しい行に出力することです。私は初心者のプログラマーで、これは割り当てなので、このタイプの形式を使用する必要があります (文字列ライブラリは許可されていません)。どこが間違っていたのか、どうすれば修正できるのか知りたいだけです。

4

2 に答える 2

1

うーん、私はあなたの質問の別の1つでこのプログラムを見たことがあります... 文字列内の各単語を読み取り、Cで異なる行に各単語を出力する関数

ループにエラーがあります:

while (s[nextindex] != ' ' || s[nextindex] != '\0')

&&ではなく、を使用してください||。2つの条件の少なくとも1つは常に真になるため、このループはそのままでは終了しません。

次に、他の問題(文字列の終わりの検出に失敗する)を修正する必要があります。これはそれを行います:

if( str[nextindex] != 0 ) {
    str[nextindex] = '\0';
    nextindex++;
} else {
    nextindex = -1;
}
于 2012-10-04T03:21:46.500 に答える
0

私はあなたのコードのロジックをたどるのに苦労していますが、まず、

i = nextword(NULL);

メインのループではあまり達成されません。代わりに、単語を削除した残りの文字列を反復処理するつもりでしたか?

于 2012-10-04T03:15:00.173 に答える