1

「print 2」や「print 3 test」など、スペースを含む文字列があります。最初の引数を削除しようとしています - これらの例では、print.

私はstrtok()を試しました:

char *test;
test = strtok(COMMAND, " ");
printf("%s\n", test);

ただし、印刷テストはセグメンテーション違反になります。関数を作成してみましたが、main() からは正常に動作しますが、必要な関数から呼び出すと、セグメンテーション違反も発生します。

char* split(char S[], int N) {
    printf("Running split() on %s\n", S);
    int Spaces = 1;
    int i = 0;
    for (i; i<strlen(S) && Spaces <=N; i++) {
        if (S[i] == ' ') {
            Spaces++;
        }
    }
    printf("split: %s\n", &S[i]);
    //return "0";
    return &S[i];
}

ある種のポインターの問題だと思います。コマンドは次のように印刷機能に渡されます。

Print(File, Lines, COMMAND);
4

2 に答える 2

2

テストサンプルの COMMAND が何であるかはわかりませんが、strtok が null を返すかどうかをテストする必要があります (strtok がトークンを見つけられない場合)。nullpointer を指定した printf は、seg vault を提供します。

通常、ループから strtok を呼び出します: http://www.cplusplus.com/reference/clibrary/cstring/strtok/

于 2012-07-09T18:31:57.513 に答える
0

常に strtok() の戻り値をテストしてください!

そのようなバイト (2 番目のパラメーター) が見つからない場合。1 番目のパラメーターが指す文字列にトークンが存在しない場合は、NULL ポインターが返されます。

于 2012-07-10T09:39:54.333 に答える