【发布时间】:2014-03-08 04:36:45
【问题描述】:
所以我现在正在玩弄 char 数组转换和测试这个简单的代码:
#include <stdio.h>
int main(void) {
char arr[BUFSIZ];
printf("Input: ");
fgets(arr, sizeof(arr), stdin);
int x = arr[0] - '0';
printf("Output: %d\n", x);
}
输出应该是变量x的值,它是输入的第一位。 但是,如果将负整数作为输入传递,我会得到:
jharvard@appliance (~/CS50/pset1): ./test
Input: -123
Output: -3
输出应该是-1,但是是-3。这 minus 是否与数组索引有关? 我假设这会强制编译器使 array[-1] index 输出的值?
我认为这就是重点,因为将行 int x = arr[0] - '0'; 更改为 int x = arr[1] - '0'; 后,我明白了:
Input: -123
Output: 1
当传递负数时。
还有另一个例子。
将 int x 行更改为 int x = arr[BUFSIZ - 1] - '0'; 时,我得到:
jharvard@appliance (~/CS50/pset1): ./test
Input: -123
Output: -40
jharvard@appliance (~/CS50/pset1): ./test
Input: 123
Output: -40
jharvard@appliance (~/CS50/pset1): ./test
Input: 122
Output: -40
jharvard@appliance (~/CS50/pset1): ./test
Input: 890
Output: -40
无论我传递的各种正数还是负数,在这种情况下输出总是-40。
更改索引后,例如到int x = arr[BUFSIZ - 2] - '0'; 或int x = arr[BUFSIZ - 7] - '0'; 我得到了不同的输出——有时是正数或负数,但总是会打印出这个特定的数字。
我 PC 上的 BUFSIZ 长度为 8192 字节。
【问题讨论】:
-
我猜问题是
-符号,为什么不直接使用atoi()代替:int x = atoi(arr);
标签: arrays casting char buffer c99