gpt4 book ai didi

c - 我的代码中的 c 段错误。

转载 作者:行者123 更新时间:2023-11-30 15:27:28 25 4
gpt4 key购买 nike

我正在使用 c 创建一个简单的 UNIX shell。如果有两个命令:更改用户提示的“设置提示”和退出程序的“退出”,则系统会处理任何其他命令。我有以下代码,但我不断遇到段错误。我访问不正确是什么?请帮忙。

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
}
}
}
}
}
}

最佳答案

来自手册页(Unix shell 中的 man strtok):

RETURN VALUE

The strtok() and strtok_r() functions return a pointer to the next token, or NULL if there are no more tokens.

这意味着在使用它之前,您需要确保返回值(token)不是 NULL 指针。

如果 cmdLine 变量包含 '\n' 字符,system() 调用也可能不喜欢它。

此外,fgets() 可以在错误时返回 NULL:

RETURN VALUE

gets() and fgets() return s on success, and NULL on error or when end of file occurs while no characters have been read.

不过你应该没问题。

关于c - 我的代码中的 c 段错误。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26963021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com