实现 atoi - 递增变量 j 时出现分段错误
Implementing atoi - Segmentation Fault when incrementing variable j
C 程序首先存储一个数字字符串输入:“134”,然后将每个字符存储到一个字符数组中。
然后它从数组“4”的最后一个字符开始,然后乘以 10^0,然后下一个元素乘以 10^1,依此类推...
例如:
总和 = (4* 10^0) + (3 * 10^1) + (1 * 10^2)
我不允许使用内置的 pow 库,所以我自己实现了一个。该程序仅在输入字符串是个位或十位时才有效,例如:5、56 或 28 等,但不适用于数百或更高的任何数字。
(我在添加 j++ 的那一刻开始收到段错误)
#include <stdio.h>
int pow(int, int);
int i;
int result;
#define SIZE 10
char input[SIZE];
int j = 0;
int main(){
printf("Enter a word of positive number or quit: ");
scanf("%s", input);
int sum = 0;
for(i = strlen(input)-1; i >= 0; i--){
printf("pow: %d\n", (input[i] - '0') * pow(10, j));
sum = sum + ((input[i] - '0') * pow(10,j));
printf("sum: %d\n", sum);
j++;
printf("j: %d\n", j);
}
printf("%d\n", sum);
}
int pow(int base, int exponent){
if(exponent == 0) return 1;
if(exponent == 1) return base;
result = 1;
for(i = 0; i < exponent; i++){
result = result * base;
}
return result;
}
您已将 i
声明为全局变量。然后它在 main()
和 pow()
中用作迭代器,这是不希望的。这可以通过使迭代器局部于循环范围来解决,如
for (int i = strlen(input)-1; i >= 0; i--)
和
for (int i = 0; i < exponent; i++)
C 程序首先存储一个数字字符串输入:“134”,然后将每个字符存储到一个字符数组中。 然后它从数组“4”的最后一个字符开始,然后乘以 10^0,然后下一个元素乘以 10^1,依此类推...
例如: 总和 = (4* 10^0) + (3 * 10^1) + (1 * 10^2)
我不允许使用内置的 pow 库,所以我自己实现了一个。该程序仅在输入字符串是个位或十位时才有效,例如:5、56 或 28 等,但不适用于数百或更高的任何数字。 (我在添加 j++ 的那一刻开始收到段错误)
#include <stdio.h>
int pow(int, int);
int i;
int result;
#define SIZE 10
char input[SIZE];
int j = 0;
int main(){
printf("Enter a word of positive number or quit: ");
scanf("%s", input);
int sum = 0;
for(i = strlen(input)-1; i >= 0; i--){
printf("pow: %d\n", (input[i] - '0') * pow(10, j));
sum = sum + ((input[i] - '0') * pow(10,j));
printf("sum: %d\n", sum);
j++;
printf("j: %d\n", j);
}
printf("%d\n", sum);
}
int pow(int base, int exponent){
if(exponent == 0) return 1;
if(exponent == 1) return base;
result = 1;
for(i = 0; i < exponent; i++){
result = result * base;
}
return result;
}
您已将 i
声明为全局变量。然后它在 main()
和 pow()
中用作迭代器,这是不希望的。这可以通过使迭代器局部于循环范围来解决,如
for (int i = strlen(input)-1; i >= 0; i--)
和
for (int i = 0; i < exponent; i++)