0

所以我正在构建一个 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”只是一个字符数组的宏,即“[MY_SHELL]:”。

4

1 回答 1

0

问题出在这句话上:

scanf("%s", &target);

您需要传入一个指向输入字符串缓冲区的指针,而不是指向 a 的指针char *。将其替换为以下内容:

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

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

于 2013-10-06T18:31:43.870 回答