了解atoi(var-1)与atoi(var)-1?

时间:2014-10-21 02:37:01

标签: c atoi

我有一个问题,我的C程序只为小于5的值正确分配输入数据。我在创建保存值的int数组时发现错误:我使用了atoi(var-1)而不是atoi( VAR)-1。

当var ='5'时,atoi(var-1)在打印时为0。为什么错误的char转换为int转换的数字为“5”?那为什么它在那时变为零?

我只是对这实际发生的事情感到好奇。

2 个答案:

答案 0 :(得分:3)

当你写atoi(var - 1)时,varchar*,你要求函数atoi读取从低于{1的内存位置开始的字符串{1}}并将其转换为整数。

通常,位于较低内存地址的字符可以是任何内容。当你的varchar*时,你恰好让它破裂了,但它可能发生在任何地方。

另一方面,'5'完全符合您的预期,将atoi(var) - 1转换为var,然后以数字方式减去1。

答案 1 :(得分:2)

指针算术。如果var是字符串(char *),则var + n是从偏移n开始的子字符串。

const char* s = "12345":
printf("%d\n", atoi(s + 2));  // prints 345

也允许减法:var - 1是指向字符串之前的一个字符的指针。这可能是任何内容,但可能是非数字字符,因此atoi返回0。