【发布时间】:2020-08-29 23:21:54
【问题描述】:
也许这是一个愚蠢的问题,但我是 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;
}
【问题讨论】:
-
aux;是char *,而array[longi]是int。为什么要分配一个指向int的指针? -
您的
array指针指向buffer的某些部分,在您的函数调用后不再存在。 -
您在查看编译器警告吗?请使用
-Wall -Werror编译。编译器几乎会告诉你所有与我们相同的事情。如果您干净地编译所有内容但仍然存在段错误,则使用-ggdb3构建并使用 valgrind 或 gdb,它会告诉您问题所在。 -
最好先使用字符缓冲区
char* array = (char*)malloc(4 * sizeof(char));,然后再使用array[longi] = *aux,当然您还必须将printf 语句更改为printf("%c\n", arr[0]);或类似的东西。 -
更好,don't cast
mallocin C programs ;无论是在 OP 的原始代码中,还是在此页面上的其他任何地方。无论如何,您有更紧迫的问题,这里有足够的东西强烈敦促good book on C programming 作为参考点。