获取用户输入时出现段错误?

时间:2013-10-06 18:25:30

标签: c linux shell scanf strcat

所以我正在构建一个shell,我正在实现的一个命令是提示符。这将采用一个参数并将其设置为提示,但是如果没有输入参数,它将要求用户输入然后使用.....这措辞非常糟糕所以这是一个例子:

[SHELL] prompt code
code[SHELL] ls
code[SHELL] ....

[SHELL] prompt
please enter a prefix: (user input goes here, say code again)
code[SHELL]

现在第一种情况正常,但是当我尝试没有参数的提示时,它会询问用户输入,但是当我输入它时,它会出现故障并且我不确定原因。

这是我到目前为止的代码:

void prompt(char *target)
{
    if(!target)
    {
        printf("Please enter a prefix: ");
        scanf("%s", &target);
    }
    char *result = malloc(strlen(SHELL) + strlen(target) + 1);
    strcpy(result, target);
    strcat(result,  SHELL);
    SHELL = result;
}

任何想法?也许这只是我的一个简单错误,但似乎这应该有效。

顺便说一句,在我的代码中,“SHELL”只是一个char arrray的宏,是“[MY_SHELL]:”。

1 个答案:

答案 0 :(得分:0)

问题在于这句话:

scanf("%s", &target);

您需要将指针传递给输入字符串的缓冲区,而不是指向char *的指针。替换为:

target = (char *)malloc(1000);
scanf("%s", target);

当然,这不是安全代码,因为用户的输入可能超过1000个字符。但是让我们先了解基础知识。