0

だから私は以下のこのビットのCコードを持っています. 入力ファイルからテキストをテストするステートメントを配置printfすると、大量のジャンク値が得られることがわかります。具体的には、それらはアルファベットでも数値でもありません。疑問符が付いたひし形だと思います。これは、これらの値を本来あるべき方法で処理していないことを意味すると思います。入力ファイルには MIPS アセンブリ コードが少し含まれていますが、このコンテキストではテキスト ファイルのみです。プログラムの他のすべての部分をコメントアウトしましたが、この小さな部分が残っていますが、まだ悪い値が返されます。ここで何が間違っている可能性がありますか?

コンソールでプログラムを実行するために使用するコマンドは次のとおりです。

./アセンブラ -symbols adder.asm

Where ./assembler is the driver    (argv[0])
       -symbols is a tag used      (argv[1])
       adder.asm is the input file (argv[2])

したがって、一度開くと、このファイルからテキストを取得できるはずです。私が信じる限り、ファイルの問題ではありません。以前は機能していました。

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>

FILE *fp;
FILE *fp_out;

void main(int argc, char* argv[])
{
    int mode;

    if (strcmp(argv[1], "-symbols") == 0)
    {
        fp = fopen(argv[2], "r");
        mode = 1;
    }
    else
    {
        fp = fopen(argv[1], "r");
        fp_out = fopen(argv[2], "w");
        mode = 2;
    }
}
4

1 に答える 1

2

開いているセクションの直後に次の行を追加#include <errno.h>し、先頭に追加してみてください。

printf("%p, %p, %d\n", fp, ftp_out, errno);

が nullの場合fp、ファイルを開く際に問題があります。戻り値をチェックしないと、間違ったバッファから読み取ることができます。たぶん、いくつかの許可の問題があります(または何でも)。また、errno != 0お困りの際は. perror <num>コマンドラインで errno 値を確認してください (またはperror(3)関数を参照してください)。

于 2013-04-26T15:03:06.223 に答える