0

だから私はシェルを構築しており、実装しているコマンドの1つはプロンプトです。これは引数を取り、それをプロンプトとして設定しますが、引数が入力されていない場合は、ユーザー入力を求めてからそれを使用します.....これは非常にひどい言葉遣いなので、例を次に示します:

[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]: " という char 配列の単なるマクロです。

4

1 に答える 1

0

問題は次のステートメントにあります。

scanf("%s", &target);

へのポインターではなく、入力文字列のバッファーへのポインターを渡す必要がありますchar *。次のようなものに置き換えます。

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

もちろん、ユーザーの入力が 1000 文字を超える可能性があるため、これは安全なコードではありません。しかし、まず基本を正しく理解しましょう。

于 2013-10-06T18:31:43.870 に答える