【发布时间】:2015-12-01 10:50:39
【问题描述】:
void main(){
int digits[21]; //this was initialized so that every element is 0 by looping over every element and setting it to 0
char input[20];
scanf("%s", input);
parseDigits(digits, input);
}
void parseDigits(int* digits, char *string){
char *end = string + strlen(string) -1;
int i;
for (i = 0; i < strlen(string) - 1; i++, end--){
int *digit = digits + i;
printf("%d", *digit);
*digit += charToDigit(*end);
if (*digit >= 10){ //carry one
*digit -= 10;
digit++;
*digit += 1;
}
}
}
打印一个过大的整数,而不是预期输出的 0。我不明白,因为
digits + i
应该还在数组的范围内。
【问题讨论】:
-
你是如何初始化这个数组
int digits[21];的? -
"这是初始化的,所以每个元素都是 0" 这是在哪里完成的?不在您显示的代码中。
-
Mike,cmets 不会神奇地诱导期望的行为发生。您必须实际编写注释所暗示的代码。
-
什么是
charToDigit?? -
你写的//这是初始化的,所以每个元素都是0。那是完全错误的。
digits数组根本没有初始化,所以它包含随机值。
标签: c pointers int dereference