1

Hello can you tell me why is the compiler building sucessfully when there's only one largenumber a, but when I declare another largenumber b and do the exact same things it shows Segmentation fault (core dumped) . I don't understand what's wrong? I can't declare other of type largenumber because it shows segmentation fault

#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;
}
3
  • 5
    Consider char_number[i]-'0' instead of your switch. Commented Dec 12, 2018 at 19:01
  • 2
    The segmentation fault occurs because you declared a pointer number1 which is not initialized, it does not point to valid memory but you try to write the input there. change it to char number1[100] (where 100 should be a meaningful buffer size). Commented Dec 12, 2018 at 19:03
  • 1
    Also note that after inserting you do not know how many digits you wrote in your struct, a possible solution would be to write the least significant digit first and set everything to 0 after the most significant digit. Commented Dec 12, 2018 at 19:09

1 Answer 1

5

You are using number1 uninitialized,

Use

char *number1 = malloc(32);

or

char number1[32];

before calling scanf, also use a width specifier in order to avoid buffer overflows:

scanf("%31s", number1);
Sign up to request clarification or add additional context in comments.

1 Comment

Or even better, declare number1 as an automatic array (char number1[32];), and avoid messing with dynamic allocation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.