atoi来自char *在C中返回0

时间:2012-06-01 09:31:09

标签: c atoi

对C来说很新,所以请耐心等待。我有一个函数,它接收3个char *变量,opcodearg1arg2

arg1和arg2可以是(1)包含保存unsigned int的变量名称的字符串,或者(2)实际的整数。

无论哪种方式,我都需要得到实际的整数。我到目前为止尝试使用atoi,但它似乎在第一种情况下返回0。

即。

sscanf(instruction, "%s %s %s", opcode, arg1, arg2);

sum = atoi(arg1) + atoi(arg2);

我不能发布整个代码,因为它不属于我,但希望上面的演示有点帮助?​​

3 个答案:

答案 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);
}