Problem ze wskaźnikiem – błąd "assignment makes pointer from integer without a cast"

0

Witam mam problem z kodem konsola wyświetla mi błąd:

[Warning] assignment makes pointer from integer without a cast

Jednak program wyświetla poprawne wartości.

#include<stdio.h>
struct emp{
char* name;
int* age;
};
int main()
{
struct emp e;
e.name = "Jan";
e.age = 23;
printf("%s %d", e.name, e.age);
return 0;
}
3

Pola name i age tej struktury to wskaźniki, a Ty używasz ich tak, jakby nimi nie były.

Zapewne ostrzeżenie dotyczy tej linijki:

e.age = 23;

Kompilator z liczby 23 robi wskaźnik na adres 23 bez rzutowania. Zanim cokolwiek wpiszesz do tych pól, powinieneś alokować dla nich pamięć. I pamiętać o tym, aby tę pamięć zwolnić, kiedy już struktura e nie będzie potrzebna.

0

Czyli co konkretnie trzeba zmienić w tej linijce , chciałbym aby struktura pozostała w niezmienionym stanie.

2
#include<stdio.h>

struct emp {
    char* name;
    int* age;
};

int main(void)
{
    struct emp e;
    e.name = "Jan";
    e.age = malloc(sizeof(int));
    *e.age = 23;
    printf("%s %d", e.name, *e.age);
    return 0;
}
3

Masz dwa błędy, które się znoszą nawzajem:

  • pierwszy to ten który opisujesz
  • drugi w stringu formatującym przy printf

A problem leży w tym, że używasz wskaźnika tam gdzie nie jest potrzebny (wystarczy usunąć jeden znak):

#include<stdio.h>
struct emp{
    char* name;
    int age;
};

int main()
{
    struct emp e;
    e.name = "Jan";
    e.age = 23;
    printf("%s %d", e.name, e.age);
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1