Dlaczego mi się to nie kompiluje ?
struct Nazwa{
char imie[80];
int wiek;
};
struct Nazwa Tomek;
Tomek.imie = 'a';
Dlaczego mi się to nie kompiluje ?
struct Nazwa{
char imie[80];
int wiek;
};
struct Nazwa Tomek;
Tomek.imie = 'a';
Tomek.imie
jest typu char *
a 'a'
jest typu char
. W jaki sposób miałoby się to kompilować?
Chciałeś zrobić tak:
strcpy(Tomek.imie, "a");
Btw.
Kopiowanie tablic znaków w C to nie taka banalna rzecz - ani strcpy
ani strncpy
samo nie gwarantuje, że tablica będzie poprawnie zakończona znakiem '\0'
. Trzeba zapewnić to ręcznie i chyba najpopularniejszym rozwiązaniem jest użycie strnact
:
void copyString(const char *restrict src, char *restrict dest, size_t destSize) {
if(destSize > 0) {
dest[0] = '\0';
strncat(dest, src, destSize - 1);
}
}
Zmieniłem kolejność argumentów na moim zdaniem bardziej naturalną w porównaniu do strncpy
. Funkcja mogła by też zwracać informacje o tym, czy kopiowanie udało się w całości czy bufor był za mały. (Tak robi strlcpy
, w zasadzie to działa w ogóle podobnie)
dobra to już wiem jak. A czemu tutaj w ostatniej linijce jest błąd ?:
struct Nazwa{
char imie[80];
int wiek;
};
struct nazwa *wskaznik;
struct Nazwa Tomek;
strcpy(Tomek.imie,"aaaa");
wskaznik = &Tomek;
wskaznik->wiek = 10;
struct nazwa *wskaznik;
Nazwa
, nie nazwa