несовместимые типы при назначении типу struct * из struct - PullRequest
0 голосов
/ 08 января 2019

Я не могу понять, почему я получаю эту ошибку: Ошибка: «несовместимые типы при назначении типу« 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 голосов
/ 08 января 2019

Не могу понять, почему я получаю эту ошибку: несовместимые типы при назначении типу PERSON из типа PERSON.

Я достаточно уверен, что вы не получите эту ошибку, но если вы действительно это сделаете, вам следует переключиться на лучший компилятор. Я полагаю, что ошибка, которую вы получаете вместо

Incompatible types when assigning to type PERSON * from type PERSON

, потому что это именно то, что вы пытаетесь сделать, учитывая ваше объявление функции read_array().

Из реализации и использования выясняется, что вы хотите, чтобы эта функция возвращала указатель на структуру, а не ее копию. Это было бы

PERSON *read_array(int n);

... и то же самое в определении функции.

0 голосов
/ 08 января 2019

Вернуть указатель на PERSON, а не PERSON.

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

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