繁体   English   中英

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

[英]Understanding atoi(var-1) versus atoi(var)-1?

我遇到了一个问题,我的C程序仅为小于5的值正确分配了输入数据,我发现创建包含值的int数组时出错:我使用了atoi(var-1)而不是atoi(var)- 1。

当var ='5'时,输出时atoi(var-1)为0。 为什么错误的char到int转换中断的数字“ 5”? 为何此时它变为零?

我只是好奇这到底发生了什么。

当您编写atoi(var - 1) ,其中varchar* ,您要求函数atoi读取从内存位置开始比var低一的字符串并将其转换为整数。

通常,位于较低内存地址的字符可以是任何字符。 您恰好在char*'5'时中断了它,但是它可能发生在任何地方。

另一方面, atoi(var) - 1完全符合您的期望,将var转换为int ,然后在数值上减去1。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM