Возможно, это глупый вопрос, но я новичок в C. Я пытаюсь вернуть указатель из функции с помощью malloc. Я сделал массив с помощью strtok. Вот код функции, из которой я пытаюсь вернуть указатель:

int *data(){
    
  int longi=0, *array=(int *) malloc(4 * sizeof(int));
  char buffer[1024];     
  char *aux;       
  printf("Enter if approved(A) or failed (F) separated by a comma \",\": \n");
  fgets(buffer,1023,stdin); 
  aux=strtok(buffer, ","); 
  while(aux)                 
  {
      array[longi]=aux; 
      longi++;                 
      aux=strtok(NULL, ","); 
  } 

  printf("%s", array[0]);
  return array;
}

И вот моя основная функция:

int main(){
  int *arr=data();
  printf("%s",arr[0]); /*segmentation error */
  return 0;
}
-2
Abner 30 Авг 2020 в 02:21

2 ответа

Лучший ответ

Ошибка сегментации возникает из-за того, что вы пытаетесь распечатать часть своего массива в виде строки (% s). При использовании% d или% c (с преобразованием символов) эта ошибка не возникает. Однако это все еще не имеет смысла, поскольку вы пытаетесь поместить указатель на начало строки внутри массива целых чисел. Я бы предложил выделить массив символов вместо целых чисел и убедиться, что у вас есть один символ внутри aux, а затем добавить его в массив. Вам также необходимо убедиться, что вы не принимаете более 4 разных символов, иначе у вас все еще может быть переполнение буфера.

0
Liel Fridman 29 Авг 2020 в 23:38

Printf при установленном флаге% s пытается прочитать строку из выделенной памяти, вы задаете целое число, поэтому он дает segfault replace array [longi] = aux; с массивом [longi] = atoi (aux); atoi преобразует строку в целое число, и для обоих printfs замените% s на% d

0
bari barix 29 Авг 2020 в 23:59