Cでキー値文字列を解析して適切な変数に割り当てるにはどうすればよいですか?
つまり、この文字列をプログラムに渡します。
x = 193
そしてそれはapprに値を割り当てます。可変なので
printf("%i", x);
を生成します
193
与えられた
char keyname[32];
int val;
ここで、キー名の名前と整数割り当ての値、およびCライブラリ関数をconst char * str = "x = 193"
使用して解析を実行できるサンプル形式の文字列を格納します。sscanf()
sscanf(str, "%32[^=]=%d", keyname, &val)
たとえばstr = " x = 193"
、store string " x "
toに keyname
なるので、割り当ての前後や変数名の前のスペースに関して柔軟な構文が必要な場合は、余分なスペースを削除する必要があることに注意してください。
は成功した変換のsscanf()
数を返すので、2
この場合は返されることをテストする必要があります。
変数名とその整数値をとに格納しkeyname
たらval
、上記の@unwindのように、どの変数に割り当てるかを確認val
し、を使用してテストできますstrcmp
。if
固定名変数がたくさんある場合は、テーブルを作成し、ルックアップ関数を使用して、保守が困難でエラーが発生しやすいステートメントの長いリストの1つよりもきれいにすることができます。
実行時に魔法のように変数を導入することはできません。Cプログラムが実行されているとき、変数の名前はずっと消えていて、コンパイラーはコードをビルドするためにその情報を必要としますが、CPUはコードを実行するためにそれを必要としません。
strcmp()
既知の変数名に反対し、それに応じて割り当てる必要があります。これを最適化するために(多くの名前の値に対して)、もちろん、ハッシュテーブルのようなものを使用して、値を保持する名前と整数のペアを格納できます。