将我自己的结构与指向数组的指针一起使用时出现分段错误(核心转储)

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)

Dav*_*eri 5

您正在使用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)

  • 或者更好的是,将 `number1` 声明为一个自动数组(`char number1[32];`),并避免与动态分配混淆。 (2认同)