1

次のような入力ファイルがあります。

1 2 2 Medium 
1 2 0 Medium
2 1 0 Medium
2 0 2 Medium

fscanf() を使用して整数値を読み取っていますが、正常に機能しています。文字列を読み取って文字列変数に配置する方法を知っている人はいますか???

int x,y,z; 
char* cs; 
fscanf(fp3,"%d",&x); 
fscanf(fp3,"%d",&y); 
fscanf(fp3,"%d",&z); 
fscanf(fp3,"%s",&cs);
4

3 に答える 3

2

文字列を格納するには、すでに割り当てられたスペースが必要です。次のようなことを試してください:

int x,y,z; 
char cs[20];
fscanf(fp3,"%d",&x); 
fscanf(fp3,"%d",&y); 
fscanf(fp3,"%d",&z); 
fscanf(fp3,"%19s",cs);

すべての値を一度にスキャンすることもできます。

fscanf(fp3,"%d %d %d %19s", &x, &y, &z, cs);

注意:%<length>sバッファ オーバーフローを防ぐために、必ず scanf パターンで使用してください。

于 2013-03-02T08:21:23.617 に答える
1

2つのことに気をつけてください:

  • 文字列をコピーするバッファを予約する必要があります。
  • また、単純な「%s」scanfパターンを使用しないでください。禁止されるべきです。代わりに、バッファの長さから1を引いた長さをとの間に挿入し%ますs。たとえば、8バイトのバッファの場合は「%7s」。
于 2013-03-02T09:53:38.017 に答える
1

2 言いたいこと:

  1. 1 つの書式文字列を使用すると見栄えが良くなります
  2. ループを使用する必要があります

ここにいくつかのコードがあります:

int a,b,c;
char str[256];
while(fscanf(fd, "%d %d %d %s ", &a, &b, &c, str) == 4){
    //get some coffee
}

これは、End of File ループではない標準的なものです。また、すでにポインターであり、 、またはのように参照する必要がないため、必要ありませstrん。フォーマット文字列の末尾の の後のスペースは、1 つのスペースが読み取られると停止することを意味します。このように、文字列には含まれません。&abc%sstr

于 2013-03-02T08:27:22.770 に答える