zmienna statyczna typu char
Ostatnio zmodyfikowano 2017-06-12 19:46
degel1234 Temat założony przez niniejszego użytkownika |
zmienna statyczna typu char » 2017-06-12 16:59:40 Czesc mam taki program:
#include <stdio.h> #include <stdlib.h> #include<string.h> char *wczytaj_nazwe(short int *lznakow) { static char nazwa[4]; gets(nazwa); *lznakow=strlen(nazwa); return nazwa;
} int main() { char *nazwa,*nazwa1; int naz; short int l1,l2,l3; nazwa=wczytaj_nazwe(&l1); // np wpisuje nazwe kacper nazwa1=wczytaj_nazwe(&l2); // tutaj bartek naz=wczytaj_nazwe(&l3); // solina printf("\n %s",nazwa); printf("\n %s",nazwa1); printf("\n %s",naz);
return 0; }
Rezultatem jest wypisanie na ekran 3x "solina". Tylko jak przesledzilem ten program to w pierwszym wywolaniu zmiennej nazwa przypisana jest wartosc kacper, w drugim zmiennej nazwa1 przypisuje wartosc bartek, a w trzecim wywolaniu zmiennej naz ktora jest typu int przypisuje wartosc solina. I dlaczego moge dawac nazwy dluzsze niz 4znaki skoro tablica nazwa jest 4 elementowa? I jak do tego wszystkiego ma sie fakt ze tablica jest zmienna statyczna? Troche nie rozumiem tego programu a mam okreslic co on wyswietli i dlaczego
|
|
Rashmistrz |
» 2017-06-12 17:16:16 dlaczego moge dawac nazwy dluzsze niz 4znaki skoro tablica nazwa jest 4 elementowa? |
Piszesz poza tablicą, co jest złe i nieprzewidywalne w skutkach. jak do tego wszystkiego ma sie fakt ze tablica jest zmienna statyczna? |
Zmienna statyczna staje się globalna i w przypadku wyjścia z funkcji zachowuje przechowywane dane. Troche nie rozumiem tego programu... Rezultatem jest wypisanie na ekran 3x "solina". |
Masz zwracany wskaźnik na tą samą zmienną statyczną. Kto ten pokarcony kod napisał? |
|
degel1234 Temat założony przez niniejszego użytkownika |
» 2017-06-12 17:55:38 Moj wykladowca i na egzaminie mam go wytlumaczyc :) Powoli zaczynam kumac tylko teraz jak wypisuje naz=wczytaj_nazwe(&13) to wyskakuje blad konwersji z char* to int, a wczesniej dzialalo ;/ Mam profesorowi powiedziec ze tu jest blad czy jednak jest wytluamaczenie takiego zapisu? W kodzie od profesora na koncu nie bylo tych dwoch printf ostatnich jednak i bez tego wyskakuje blad |
|
Rashmistrz |
» 2017-06-12 18:17:49 na egzaminie mam go wytlumaczyc |
To wytłumacz go tutaj na forum. Będzie zabawnie...Podaj kod raz jeszcze, ale w znacznikach [cpp]...[/cpp]. |
|
degel1234 Temat założony przez niniejszego użytkownika |
» 2017-06-12 18:24:27 #include <stdio.h> #include <stdlib.h> #include<string.h> char * wczytaj_nazwe( short int * lznakow ) { static char nazwa[ 4 ]; gets( nazwa ); * lznakow = strlen( nazwa ); return nazwa; } int main() { char * nazwa, * nazwa1; int naz; short int l1, l2, l3; nazwa = wczytaj_nazwe( & l1 ); nazwa1 = wczytaj_nazwe( & l2 ); naz = wczytaj_nazwe( & l3 ); printf( "\n %s", nazwa ); return 0; } Dokladni taki kod mam |
|
Rashmistrz |
» 2017-06-12 19:06:12 Mam profesorowi powiedziec ze tu jest blad czy jednak jest wytluamaczenie takiego zapisu? |
Zastanów się co w ogóle możesz o tym kodzie powiedzieć. :F |
|
Monika90 |
» 2017-06-12 19:20:00 Nie ma takiej funkcji gets. |
|
latajacaryba |
» 2017-06-12 19:30:26 @up
A to nie czasem to: https://pl.wikibooks.org/wiki/C/gets ? |
|
« 1 » 2 |