0

クラスで基本的な C シェルを作成する課題があります。その一部と完全に実装されたコードを説明する多くのページを見つけました。コピーするつもりはありません。ただ、始める方法として今使っているだけです。

ですから、私は明らかにこのプロジェクトの最初にいます。私が見ている1つの例は、ユーザーの入力を解析し、引数の先頭へのポインターを格納しますchar *argv[3];

私はこれを誤解しているだけですか、それとも3つ以上の引数がある場合、これは技術的に壊れますか? (言う/a.out arg1 arg2 arg3など)。これをどういうわけかmallocしたいですか?

私は a.out が考慮されていることargv[0]、および引数argv[1]がたくさんあることを知っています。プログラムの引数が多すぎるのはおそらく悪い習慣ですが、TAがシェルをテストするために何を使用するかわからないため、少なくとも対処したいと思います。

4

2 に答える 2

0

壊れるかもしれないし、壊れないかもしれませんが、バグがあります。3 つ以上の引数が存在する場合に何が起こるかというと、予約済みの配列の長さ 3 を超えて書き込むことになります。つまり、一部の引数はメモリ内にあり、オペレーティング システムは割り当てられていないと見なし、そこに他のオブジェクトを割り当てる可能性があります。

parse() で 3 つ以上の引数が存在するかどうかを確認し、存在する場合はエラー メッセージで解析を停止する必要があります。

于 2013-11-10T23:25:25.437 に答える