1

strtok() を使用しようとするたびに、セグメンテーション違反が発生します。理由がわからない-私はCが初めてです。

これが私のコードです:

#include "shellutils.h"
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    char input[150];

    while(1) {
        prompt();
        fgets(input, 150, stdin);

        char *fst_tkn = strtok(input, " ");

        printf("%s", fst_tkn);


        if(feof(stdin) != 0 || input == NULL) {
            printf("Auf Bald!\n");
            exit(3);
        }
    }
}

ご協力いただきありがとうございます!

4

1 に答える 1

1

コードに関して:

char *fst_tkn = strtok(input, " ");
printf("%s", fst_tkn);

input変数が空であるか、スペースのみを含む場合、はfst_tknに設定されNULLます。次に、それを文字列として印刷しようとすると、すべての賭けがオフになります。

に与える値を調整することにより、次のコードでそれを確認できますinput

#include <stdio.h>
#include <string.h>
int main (void) {
    char input[] = "";
    char *fst_tkn = strtok (input, " ");
    printf ("fst_tkn is %s\n", (fst_tkn == NULL) ? "<<null>>" : fst_tkn);
    return 0;
}
于 2013-08-13T08:57:04.317 に答える