如何解析 C 中的键值字符串并将其分配给适当的变量?
即我们将把这个字符串传递给一个程序:
x = 193
它会给appr赋值。变量,所以
printf("%i", x);
生产
193
给定
char keyname[32];
int val;
我们要存储整数赋值的键名和值的名称,以及const char * str = "x = 193"
可以使用sscanf()
C 库函数为我们进行解析的示例格式的字符串:
sscanf(str, "%32[^=]=%d", keyname, &val)
请注意,例如str = " x = 193"
将存储字符串" x "
到, keyname
因此如果您想要灵活的语法来处理分配周围和变量名之前的空格,您仍然需要摆脱额外的空格。
将返回成功转换的次数,因此您应该在我们的案例中sscanf()
测试它是否返回。2
一旦你将变量名称及其整数值存储在keyname
and中val
,你就可以像上面的 @unwind 建议那样查看你应该分配val
给哪个变量,使用strcmp
. 如果你有很多固定名称的变量,你可以有一个表并使用一个查找函数来使它比一个不可维护且容易出错的长长的if
语句列表更漂亮。
您不能在运行时神奇地引入变量。当 C 程序运行时,变量的名称早已不复存在,编译器需要这些信息来构建代码,但 CPU 不需要它来运行代码。
您将不得不strcmp()
反对已知的变量名称,并相应地分配。为了优化这一点(对于许多名称值),您当然可以使用哈希表之类的东西来存储名称对和保存值的整数。