[英]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)
,其中var
是char*
,您要求函数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.