创建自定义 shell 提示时出现意外段错误
Getting an unexpected seg fault when creating a custom shell prompt
所以下面的代码片段应该在一个简单的 shell 程序中进行提示 'my257sh'>,或者 ''> 如果 -p 在启动时用作命令行参数,然后是用作自定义提示的字符串。
自定义提示工作正常,但在没有附加参数的情况下启动时出现段错误。
有人能告诉我我做错了什么非常简单和愚蠢的事情吗?
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
包含在 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);
}
argc 总是 > 0 : argv[0] 包含程序的名称。
检查
If argc > 1
同样在 -p 的情况下检查
If argc > 2
您还需要检查提示的长度以避免复制太小的字符串
所以下面的代码片段应该在一个简单的 shell 程序中进行提示 'my257sh'>,或者 ''> 如果 -p 在启动时用作命令行参数,然后是用作自定义提示的字符串。
自定义提示工作正常,但在没有附加参数的情况下启动时出现段错误。
有人能告诉我我做错了什么非常简单和愚蠢的事情吗?
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
包含在 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);
}
argc 总是 > 0 : argv[0] 包含程序的名称。 检查
If argc > 1
同样在 -p 的情况下检查
If argc > 2
您还需要检查提示的长度以避免复制太小的字符串