質問: QUEUE_SIZE; } void printQueue(void){ int i; for(i=0; i %d\n", op[i], priority(op[i])); } return 0; } ``` 理解度かなり低い状態ではあると思いますが、 教員に質問できない状況下でかなり時間かけて取り組みました。 回答よろしくおねがいします。
回答: ソースは全文見てません。 また、lib1.cが非公開とのことで再現テストができません。なので目視での話になります。 検証はしていないのであしからず。 priority関数で、引数のオペレータとリテラルをstrcmpで比較していますね。 文字列はchar[]で、末尾に`\0`が入っているのが前提です。 priority関数の冒頭で、引数のopをprintf("%s")してみてください。"-"の時だけ表示がおかしくなるかと思います。 これはスタック側のオペレータをpeekで取得した際、内部アドレスを返していると思いますが、`-`の隣に`*`が存在するせいだと思います。 質問文の実行結果では、`-`をpushしたあと`*`をpushし、一度`*`をpopしています。 終端のアドレス位置は更新していますが、`*`があった場所はそのまま残しています。なので、stackの配列は `[-, *, \0, ...]` となっています。 この状態でpeekすると`-`のアドレスが返ってきますが、このアドレスを起点とした文字列表現は`"-*"`となってしまいます。なぜなら連続するchar配列の`\0`までが文字列の扱いだからです。 解決するには、 * popした際、取り出した文字のデータ領域を `\0` で埋める * priorityの判定にstrcmpを使わない。演算子が1文字の前提なら`op == '-'`のように直接比較するので十分。 となるかと思います。