从struct分配给struct *类型时不兼容的类型

时间:2019-01-08 19:52:07

标签: c pointers struct dynamic-memory-allocation

我不明白为什么会收到此错误:错误是:“从类型'PERSOANA {aka struct}分配给类型'PERSOANA * {aka struct *}'时的类型不兼容”    您能解释一下哪里出了错吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char name[20];
    char name2[20];
    char cnp[15]; 

} PERSON;

PERSON read_array(int n);

int main()
{
    int n;
    printf("n = ");
    scanf("%d", &n);
    PERSON *v;
    v = read_array(n); //here i get the error

    return 0;
}

PERSON read_array(int n) {
    PERSON *v;
    v = malloc(n * sizeof(PERSON));
    for(int i = 0; i < n; i++) {
        printf("name=");
        gets(v[i].name);
        //more instr
    }
    return v; // and also here
}

2 个答案:

答案 0 :(得分:2)

返回指向PERSON而不是PERSON的指针。

// PERSON read_array(int n);
PERSON *read_array(int n);
//     ^

// PERSON read_array(int n) {
//     v
PERSON *read_array(int n) {

答案 1 :(得分:0)

  

我不明白为什么会出现此错误:从PERSON类型分配给PERSON类型时,类型不兼容。

我有理由相信您不会遇到该错误,但是如果您确实如此,则应该切换到更好的编译器。我推测您得到的错误是

Incompatible types when assigning to type PERSON * from type PERSON

,因为实际上,这是您要尝试的,因为您已声明了函数read_array()

从实现和使用看来,您似乎希望该函数返回指向结构的指针,而不是该结构的副本。那是

PERSON *read_array(int n);

...和功能定义相同。