0

特定の文字列を単語に分割する別の関数 getword() を呼び出す解析関数を作成しようとしています。getword() を呼び出すと、getword に指定された文字列が、スペースで区切られた次の単語に進みます。

void parse(char *s, char **p) {
    int i = 0;
    while(*s != -1 && *s != '&' && *s != '\n' && *s != ';' && *s != '\0') {
       p[i] = s;
       i++;
       getword(s);
    }

}

呼び出しプログラムを実行した後、配列 p の char ポインターが指す文字列を出力したいと考えています。これはまったく可能ですか?

私は試した :

printf("%s\n", (**p));

呼び出しプログラムでは、「(null)」のみが出力されます。

編集

文字列「Hello World」を入力した後、次のループを使用しようとしました。

for(i=0; i< MAXITEM; i++)
    printf("%s\n", p[i]);

しかし、プログラムは次のように返します。

"

(ヌル)
(ヌル)
(ヌル)...」

2 つの空白の改行と 98 (null) の改行。「Hello」と「World」という単語は実際にこれらの 2 つの空白の改行に格納されていますか、それとも実際には **p に格納されていませんか?

4

1 に答える 1

0
#define getword(s)  while (*s && *s != ' ') ++s; while (*s == ' ') *s++ = '\0'
于 2014-09-23T11:10:00.133 に答える