我正在使用c创建一个简单的unix shell。如果有两个命令:“set prompt”改变了用户提示,“退出”退出程序,系统会处理任何其他命令。我有以下代码但我不断得到分段错误。我错误访问的是什么请帮助。
int main(int argc, char *argv[])
{
char cmdLine[BUFSIZ];
char *cmdPrompt = "$PROMPT:";
{
if(argc!=1)
{
printf("error: Incorrect number of arguments on command line");
}
else
{
while(1) //This creates an infinite loop as 1 will never be equals 0
{
printf("%s", cmdPrompt); //Prints the current Prompt on the screen
fgets(cmdLine, sizeof(cmdLine), stdin); //puts the user input into the cmdLine array
char *token = strtok(cmdLine, " \n"); //tokenizes the user input with delimitters space or enter
if(strcasecmp(token, "QUIT")==0) //checks if the user input is "quit"
{
exit(EXIT_SUCCESS); //successfully exits program
}
else if(strcasecmp(token, "SET")==0) //checks if the first part of user input is "set"
{
token = strtok(NULL, " \n");
if(strcasecmp(token, "PROMPT")==0) //checks to see if the next part is promt
{
token = strtok(NULL, "\n");
cmdPrompt = token; //changes the user prompt
}
else
{
system(cmdLine); //all other commands taken care of by the system
}
}
}
}
}
}
答案 0 :(得分:1)
从手册页(Unix shell中的man strtok
):
返回值
strtok()和strtok_r()函数返回指向下一个标记的指针,如果没有更多标记,则返回NULL。
这意味着您需要确保返回值(token
)在使用之前不是NULL指针。
如果system()
变量包含cmdLine
字符,'\n'
调用也可能不喜欢。
此外,fgets()可以在错误上返回NULL:
返回值
gets()和fgets()成功返回s,错误时返回NULL或文件结束时没有读取任何字符。
你应该对那个很好。