c-创建自定义shell提示符时出现意外的seg错误



因此,下面的代码片段应该在一个简单的shell程序'my257sh'>中进行提示;,或">如果-p在启动时用作命令行arg,后面跟着一个用作自定义提示的字符串。

自定义提示运行良好,但在没有附加参数的情况下启动时,我会遇到seg错误。

有人能告诉我我做错了什么极其简单和愚蠢的事情吗?

int main(int argc, char *argv[]) {
char cmdline[MAXLINE]; /* Command line */
char def_prompt[20] = "my257sh";
const char prompt_check[2] = "-p";
char new_prompt[20];
if (argc > 0){
if (strstr(argv[1], prompt_check)) {
strcpy(new_prompt, argv[2]);
}
}
else {
strcpy(new_prompt, def_prompt);
}
signal(SIGINT, sigIntHandler); // ignores ctrl + C interrupt
while (1) {
/* Read */
printf("%s> ",new_prompt);
...

argc始终>0:argv[0]包含程序的名称。检查

If argc > 1

同样在-p的情况下,检查

If argc > 2

您还需要检查提示的长度,以避免在太小的字符串中复制

argc包含在shell上传递的参数数,包括命令本身,因此argc将始终是> 0,因为如果没有给定参数,它至少是1

如果不传递任何参数,则argv[1]将包含一个NULL指针。如果只传递一个参数,那么argv[2]就是NULL指针。

if (argc > 2)
{
if (strstr(argv[1], prompt_check))
strcpy(new_prompt, argv[2]);
}
else
{
strcpy(new_prompt, def_prompt);
}

相关内容

  • 没有找到相关文章

最新更新