[英]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.