繁体   English   中英

在 C 中使用 malloc() 从数组返回指针时出现分段错误

[英]Segmentation error while returning a pointer from an array using malloc() in C

也许这是一个愚蠢的问题,但我是 C 的新手。我正在尝试使用 malloc 从 function 返回一个指针。我用 strtok 制作了一个数组。 这是我试图从中返回指针的 function 的代码:

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;
}

这是我的主要 function:

int main(){
  int *arr=data();
  printf("%s",arr[0]); /*segmentation error */
  return 0;
}

发生分段错误是因为您试图将数组的一部分打印为字符串 (%s)。 使用 %d 或 %c(使用字符转换)时,它不会给出该错误。 但是,它仍然没有意义,因为您正试图将一个指向字符串开头的指针放在一个整数数组中。 我建议分配一个字符数组而不是整数,并确保你在 aux 中有一个字符,然后将它添加到数组中。 您还需要确保您不接受超过 4 个不同的字符,否则您可能仍然会出现缓冲区溢出。

printf 当标志是 %s 时试图从分配的 memory 中读取字符串,你给了一个 integer 所以这就是它给出段错误替换数组 [longi]=aux 的原因; 用数组 [longi]=atoi(aux); atoi 将从字符串转换为 integer,对于两个 printfs,将 %s 替换为 %d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM