1

私はCにまったく慣れておらず、自分の問題について見つけた例はうまくいかなかったか、その解決策が何であるかを完全に誤解していました。次のようなデータを含む大きなファイルがあります。

LYS 24L HB2 45.212 39.585 124.457 SC0 0.145 -0.795 0.585 0.157

各行に。すでにstrtokを使用してデータをトークン化しました。必要なのは2番目のフィールドからです。比較のために、24を整数として格納し、Lも比較のためにcharとして格納する必要があります。

使ってみました

sscanf(token[1], "%d%s", number, letter);

しかし、セグメンテーション違反エラーが発生し続けます。また、sscanfをさらに試してみると、(問題をさらに理解するために)単に「LYS」を出力しようとしましたが、プログラムは次のコマンドを使用してLを出力するだけでした。

sscanf(token[0], "%c", &stemp);
letter = stemp;
printf("%c \n", letter);

ただし、%c --->%sを変更すると(文字列全体を取得したい場合)、セグメンテーション違反エラーが再度発生します... sscanfコマンドについて理解できないことがありますか?完全な文字列を読み取れないのはなぜですか?よろしくお願いします!!

ポール

4

1 に答える 1

4

number問題は、実際にはとletterがそれぞれタイプintとであると思わcharれます。scanf()変数自体ではなく、値を格納するメモリ位置のアドレスが必要です。つまり、

int number;
char letter[2];

sscanf(token[1], "%d%s", &number, letter);

2 文字の配列を作成letterし、配列のアドレスを渡しています。これは、使用したスキャン コンバージョンと一致%sします。

于 2012-07-09T19:24:53.290 に答える