我遇到了一个问题,我的C程序只为小于5的值正确地分配输入数据。我发现在创建包含值的int数组时出现了错误:我使用了atoi(var-1)而不是atoi(var)-1。
当var='5‘时,打印出时atoi(var-1)为0。为什么数字"5“中,错误的字符到int转换中断?为什么在那个时候它变成了零?
我只是好奇到底发生了什么。
发布于 2014-10-21 02:41:57
指针算法如果var是字符串(char *),那么var + n是从偏移量n开始的子字符串。
const char* s = "12345":
printf("%d\n", atoi(s + 2)); // prints 345还允许减法:var - 1是指向字符串之前的一个字符的指针。这可能是任何东西,但可能是一个非数字字符,因此atoi返回0。
发布于 2014-10-21 02:40:50
当您编写atoi(var - 1) ( var是char* )时,您要求函数atoi读取开始于低于var的内存位置的字符串,并将其转换为整数。
一般来说,位于较低内存地址的字符可以是任何字符。当您的char*是'5'时,您碰巧遇到了中断,但它可能发生在任何地方。
另一方面,atoi(var) - 1所做的与您所期望的完全一样,将var转换为int,然后从数字上减去1。
https://stackoverflow.com/questions/26478044
复制相似问题