c中的strtok()-分段错误

c中的strtok()-分段错误,c,segmentation-fault,strtok,C,Segmentation Fault,Strtok,每次尝试使用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);

每次尝试使用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);
        }
    }
}
#包括“shellutils.h”
#包括
#包括
int main(int argc,字符**argv)
{
字符输入[150];
而(1){
提示();
fgets(输入,150,标准输入);
char*fst_tkn=strtok(输入“”);
printf(“%s”,fst_tkn);
if(feof(stdin)!=0 | | input==NULL){
printf(“Auf Bald!\n”);
出口(3);
}
}
}

谢谢你的帮助

关于代码:

char *fst_tkn = strtok(input, " ");
printf("%s", fst_tkn);
如果
输入
变量为空,或仅包含空格,则
fst\u tkn
将设置为
NULL
。然后,当您尝试将其打印为字符串时,所有赌注都将被取消

通过调整给
输入的值,您可以在以下代码中看到:

#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;
}
#包括
#包括
内部主(空){
字符输入[]=“”;
char*fst_tkn=strtok(输入“”);
printf(“fst\u tkn是%s\n”,(fst\u tkn==NULL)?“”:fst\u tkn);
返回0;
}

关于代码:

char *fst_tkn = strtok(input, " ");
printf("%s", fst_tkn);
如果
输入
变量为空,或仅包含空格,则
fst\u tkn
将设置为
NULL
。然后,当您尝试将其打印为字符串时,所有赌注都将被取消

通过调整给
输入的值,您可以在以下代码中看到:

#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;
}
#包括
#包括
内部主(空){
字符输入[]=“”;
char*fst_tkn=strtok(输入“”);
printf(“fst\u tkn是%s\n”,(fst\u tkn==NULL)?“”:fst\u tkn);
返回0;
}

即使在第一次调用
strtok
之后,您也应该检查
fst\u tkn
是否不为
NULL
。顺便说一句,返回
EXIT\u FAILURE
而不是任意值,它是在
stdlib.h
中声明的。此代码正确吗?至少在Linux上,您应该使用
#include
来正确选择strtok。当线路
strtok(输入,”)时,我可以得到类似的seg故障(请注意单引号)但它对我的工作方式与上面键入的相同。发布源代码时,请发布运行源代码的操作系统。还有,shellutils.h是什么,它位于哪里?这是什么版本的C。我习惯于在可执行代码开始之前声明指针。很高兴知道。现在可以用了,非常感谢!您应该检查
fst\u tkn
即使在第一次调用
strtok
之后也不
NULL
。顺便说一句,返回
EXIT\u FAILURE
而不是任意值,它是在
stdlib.h
中声明的。此代码正确吗?至少在Linux上,您应该使用
#include
来正确选择strtok。当线路
strtok(输入,”)时,我可以得到类似的seg故障(请注意单引号)但它对我的工作方式与上面键入的相同。发布源代码时,请发布运行源代码的操作系统。还有,shellutils.h是什么,它位于哪里?这是什么版本的C。我习惯于在可执行代码开始之前声明指针。很高兴知道。现在可以用了,非常感谢!