【问题标题】:Seg faulting when getting user input?获取用户输入时出现段错误?
【发布时间】:2013-10-06 18:25:29
【问题描述】:

所以我正在构建一个 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]:”。

【问题讨论】:

    标签: c linux shell scanf strcat


    【解决方案1】:

    问题出在这句话上:

    scanf("%s", &target);
    

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

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

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

    【讨论】:

    • 啊,好的,非常感谢!这行得通,(我没有将 1000 保留在 malloc 中,而是用 10 进行了尝试)但是是的,它行得通,所以谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2013-09-16
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多