Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zmienna statyczna typu char

Ostatnio zmodyfikowano 2017-06-12 19:46
Autor Wiadomość
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
P-162430
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ł?
P-162431
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
P-162440
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].
P-162442
degel1234
Temat założony przez niniejszego użytkownika
» 2017-06-12 18:24:27
C/C++
#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
P-162444
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
P-162445
Monika90
» 2017-06-12 19:20:00
Nie ma takiej funkcji gets.
P-162447
latajacaryba
» 2017-06-12 19:30:26
@up

A to nie czasem to: https://pl.wikibooks.org/wiki/C/gets ?
P-162448
« 1 » 2
  Strona 1 z 2 Następna strona