对C来说很新,所以请耐心等待。我有一个函数,它接收3个char *变量,opcode
,arg1
和arg2
。
arg1和arg2可以是(1)包含保存unsigned int的变量名称的字符串,或者(2)实际的整数。
无论哪种方式,我都需要得到实际的整数。我到目前为止尝试使用atoi,但它似乎在第一种情况下返回0。
即。
sscanf(instruction, "%s %s %s", opcode, arg1, arg2);
sum = atoi(arg1) + atoi(arg2);
我不能发布整个代码,因为它不属于我,但希望上面的演示有点帮助?
答案 0 :(得分:3)
正如我在评论中所说,你不能期望在运行时检索命名变量的值,在C中。变量名不是代码运行时保留的,而是纯机器代码和所有变量都已“熟化”到内存地址。名字不再存在。
atoi()
函数将包含整数的字符串(例如"4711"
)转换为实际值4711
。这就是它所做的一切,它不能以任何方式“按名称”来回溯价值。
如果你想有一个机制在程序运行时将变量名称映射到值,你将不得不自己创建该机制,因为语言没有< / em>的。例如,您可以创建某种结构数组,以便将名称与值相关联,但这当然需要您初始化该数组。
这样的事情:
int foo = 12;
char *vname = "foo";
print("the value of %s is %d\n", vname, get_variable_value(vname));
在C中不会发生,函数get_variable_value()
不能存在。
答案 1 :(得分:0)
变量名仅在编译时使用。编译程序后,所有关于您使用的名称的信息都将丢失 1 。因此,您无法通过&#34;字符串&#34;来访问变量内容。在运行时包含其名称。 2
1 更准确地说,它们可供链接器或可能的调试器使用,但这不是你可以使用(或依靠)的东西
2 我可以想到一种(可怕的)使用宏的方法或者使用所有变量名称到他们地址的地图,但我相信你的程序需要通过设计来修复。
答案 2 :(得分:0)
您必须创建一个数据结构,在其中放置变量及其值。在您使用的库中查找“哈希映射”。
然后您可以使用isdigit(arg[0])
来检查参数是数字还是变量名称。伪代码:
sum = toInt(arg1) + toInt(arg2)
int toInt(char * arg) {
return isdigit(arg[0]) ? atoi(arg) : map->lookupValue(arg);
}