首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解atoi(var-1)和atoi(var)-1?

理解atoi(var-1)和atoi(var)-1?
EN

Stack Overflow用户
提问于 2014-10-21 02:37:01
回答 2查看 196关注 0票数 0

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

当var='5‘时,打印出时atoi(var-1)为0。为什么数字"5“中,错误的字符到int转换中断?为什么在那个时候它变成了零?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-21 02:41:57

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

代码语言:javascript
复制
const char* s = "12345":
printf("%d\n", atoi(s + 2));  // prints 345

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

票数 2
EN

Stack Overflow用户

发布于 2014-10-21 02:40:50

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

一般来说,位于较低内存地址的字符可以是任何字符。当您的char*'5'时,您碰巧遇到了中断,但它可能发生在任何地方。

另一方面,atoi(var) - 1所做的与您所期望的完全一样,将var转换为int,然后从数字上减去1。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26478044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档