現在、ディスクから構成ファイルを読み取り、構造を設定する関数を更新することを任されています。
static int LoadFromFile(FILE *Stream, ConfigStructure *cs)
{
int tempInt;
...
if ( fscanf( Stream, "Version: %d\n",&tempInt) != 1 )
{
printf("Unable to read version number\n");
return 0;
}
cs->Version = tempInt;
...
}
構成をディスクに書き込むことをバイパスし、代わりにメモリに直接渡すことができるようにするもので、これとほぼ同等です。
static int LoadFromString(char *Stream, ConfigStructure *cs)
いくつかの注意事項:
- 現在の LoadFromFile 関数は信じられないほど高密度で複雑で、下位互換性のある方法で構成ファイルの数十のバージョンを読み取るため、全体的なロジックの複製が非常に面倒です。
- 構成ファイルを生成する関数とそれを読み取る関数は、古いシステムのまったく異なる部分に由来するため、データ構造を共有しないため、それらを直接渡すことはできません。ラッパーを作成することもできますが、ここでも、下位互換性のある方法で渡された構造を処理する必要があります。
- ファイルを文字列として (上記のプロトタイプのように) そのまま渡し、すべての fscanf を sscanf に変換したいという誘惑にかられますが、ポインタのインクリメント (および潜在的にはバッファ オーバーラン エラーの処理) を手動で処理する必要があります。
- これは C のままにしておく必要があるため、ストリームのような C++ 機能はここでは役に立ちません
より良いオプションがありませんか?ディスク上ではなくメモリ内の場所を実際に指す FILE * を作成する方法はありますか? ポインタ、提案、またはその他のヘルプは大歓迎です。