6

失敗したのは最初のstrtok呼び出しだと思います。私がCを書いてからしばらく経ちましたが、途方に暮れています。どうもありがとう。

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

int main(int argc, char **argv) {
  char *str = "one|two|three";

  char *tok = strtok(str, "|");

  while (tok != NULL) {
    printf("%s\n", tok);
    tok = strtok(NULL, "|");
  }

  return 0;
}
4

3 に答える 3

7

文字列リテラルの変更は未定義の動作であるため、文字列リテラルはconstchar*に割り当てる必要があります。私はstrtokがそれの議論を修正することをかなり確信しています、それはあなたが見る悪いことを説明するでしょう。

于 2010-12-18T22:41:50.317 に答える
2
于 2010-12-18T22:46:56.260 に答える
0

「バス」エラーが何であるかはわかりませんが、同じ文字列の解析を続行する場合は、ループ内のstrtok()の最初の引数をNULLにする必要があります。

それ以外の場合は、strtok()を最初に呼び出した後、変更された同じ文字列の先頭から開始し続けます。

于 2010-12-18T22:46:55.993 に答える