0

Cは非常に新しいので、ご容赦ください。sscanfを使用して、「命令」からスペースで区切られた3つの引数を3つの文字列に読み込もうとしています。私はこれまでに次のコードを持っています:

char * buffer;
buffer = (char*) malloc (5000);
sscanf(instruction, "%s %s %s", &opcode, &arg1, &arg2, buffer);

ただし、正常にコンパイルされている間、sscanfがある最後の行にセグメンテーション違反があります。前回このエラーが発生したのは、情報を格納するための十分なメモリが変数になかったためです。私はmallocを適切に使用していないと思いますか?

残念ながら、自分のものではないため、コード全体を投稿することはできません。

4

2 に答える 2

4

アンパサンドを削除します。次に、3 つの%sエスケープがそれらを埋めます (有効なメモリを指していて、バッファが十分に大きいと仮定します)。フォーマット文字列は 3 つの引数のみを参照するため、バッファがいっぱいになることはありません。

于 2012-05-31T22:43:54.560 に答える
1

sscanf不適切に使用しています。これを試して:

#define BUFFER_SIZE 1024 /* generally good practice to use constants */

char *opcode = (char *)malloc(BUFFER_SIZE);
char *arg1 = (char *)malloc(BUFFER_SIZE);
char *arg2 = (char *)malloc(BUFFER_SIZE);
sscanf(instruction, "%s %s %s", opcode, arg1, arg2);

これらの変数の使い方によっては、スタックに割り当てる方がよい場合があります。

char opcode[BUFFER_SIZE];
char arg1[BUFFER_SIZE];
char arg2[BUFFER_SIZE];
sscanf(instruction, "%s %s %s", opcode, arg1, arg2);
于 2012-05-31T22:43:45.497 に答える