Adr*_*ski 1 c struct segmentation-fault
您好,您能告诉我为什么编译器在只有一个 largenumber a 时能够成功构建,但是当我声明另一个 largenumber b 并执行完全相同的操作时,它会显示Segmentation fault (core dumped)。我不明白怎么了?我无法声明其他类型为 largenumber,因为它显示分段错误
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct largenumber{
int numbers[200];
};
typedef struct largenumber largenumber;
void insert_number_to_largenumber(int* start, int* end, char *char_number){
int* pointer;
int i=0;
printf("array elements\n");
for(pointer=start; pointer!=end; pointer++){
switch (char_number[i]) {
case 48 :
*pointer = 0;
break;
case 49 :
*pointer = 1;
break;
case 50 :
*pointer = 2;
break;
case 51 :
*pointer = 3;
break;
case 52 :
*pointer = 4;
break;
case 53 :
*pointer = 5;
break;
case 54 :
*pointer = 6;
break;
case 55 :
*pointer = 7;
break;
case 56 :
*pointer = 8;
break;
case 57 :
*pointer = 9;
break;
default:
fprintf(stderr, "array element is not a digit!\n");
exit(EXIT_FAILURE);
}
printf("a.numbers[%d] = %d \n", i, *pointer);
i++;
}
}
int main()
{
char* number1;
printf("input first number\n");
scanf("%s", number1);
largenumber a;
insert_number_to_largenumber(a.numbers, a.numbers+strlen(number1), number1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您正在使用number1未初始化的,
用
char *number1 = malloc(32);
Run Code Online (Sandbox Code Playgroud)
或者
char number1[32];
Run Code Online (Sandbox Code Playgroud)
在调用之前scanf,还使用宽度说明符以避免缓冲区溢出:
scanf("%31s", number1);
Run Code Online (Sandbox Code Playgroud)