Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Elementarz jak zwrócić zawartość tablicy char jako war funkc

24 Sty 2009 17:42 4957 4
  • Poziom 10  
    Witam.
    Serdecznie proszę o dokończenie aby return zwracał zawartość tablicy char lancuch2 .
    Polecenia ANSI C.

    Pojedyńcze znaki owszem , ale całego łańcucha nie mam pomysłu.

    Pozdrawiam i z góry dziękuję

    Elementarz jak zwrócić zawartość tablicy char jako war funkc

    AndyG

    Przepraszam , ale jestem bardziej niż początkujący.
    Może jakoś wskaźnikiem ?


    Proszę formatować kod i stosować znaczniki [code] - dodałem.
    [Dr.Vee]
  • Poziom 18  
    Całej zawartości tablicy funkcja nie może zwrócić. Jedynie wskaźnik do tablicy.

    Ale jeśli tablica jest tworzona wewnątrz funkcji to przy wyjściu z tej funkcji tablica jest niszczona, więc nie powinno się do niej(tej tablicy) już odwoływać. (chyba że to tablica statyczna)

    Jedynie możesz jako parametr funkcji pobrać wskaźnik do jakiejś globalnej tablicy i do niej zapisać wynik funkcji, lub zwrócić wskaźnik do jakiejś innej tablicy globalnej.
  • VIP Zasłużony dla elektroda
    ANSI C? To dobre ;) Przecież Twój kod to C++ (i do niezgodny ze standardem).

    Możesz ewentualnie zwrócić wskaźnik do dynamicznie alokowanej tablicy znaków, ale wtedy kod wywołujący funkcję będzie odpowiedzialny za zwolnienie tej pamięci.

    Pozdrawiam,
    Dr.Vee
  • Poziom 10  
    Dziękuję za cenne podpowiedzi.
    Próbowałem jak niżej, ale też bez rezultatu - pewnie podobny błąd.

    Pozdrawiam Uczestników postu.

    Elementarz jak zwrócić zawartość tablicy char jako war funkc
    AndyG
  • VIP Zasłużony dla elektroda
    Nie wklejaj kodu w obrazkach, bo nie da się go skopiować, a nikomu się nie będzie chciało przepisywać... Wystarczą znaczniki code.

    Już Ci napisał kaktus_c++, że nie możesz zwracać wskaźnika na zmienną lokalną (umieszczoną na stosie), bo po zakończeniu wykonywania funkcji pamięć poprzednio przydzielona dla zmiennej może (i będzie) wykorzystana na coś innego.

    Możesz albo przekazać do funkcji dodatkowe parametry (tablicę i ilość elementów):
    Code:
    char* zwroc_tablice1(char* wyjscie, int nelem)
    
    {
        snprintf(wyjscie, nelem, "Wpisuje max %d elementow do tablicy...", nelem);
        return wyjscie;
    }
    W takim przypadku wywołujący funkcję wskazuje miejsce, gdzie mają być zapisane elementy tablicy - w sumie wtedy zwracanie wskaźnika jest jedynie formalnością.
    Możesz również przydzielić pamięć dynamicznie, ale wtedy wywołujący funkcje musi o tym wiedzieć i zwolnić pamięć gdy przestanie potrzebować tych danych, np:
    Code:
    char* zwroc_tablice2(void)
    
    {
        char* wynik = NULL;
        int nelem = 16;
        int zapisano = 0;

        do {
            /* realloc(NULL, rozmiar) == malloc(rozmiar) */
            char* new_wynik = realloc(wynik, nelem *= 2);
            if (!new_wynik)
            {
                 free(wynik);
                 return NULL;
            }
            wynik = new_wynik;
            zapisano = snprintf(wynik, nelem,
                "Wpisuje do tablicy max %d znakow...", nelem);
            if (zapisano < 0)
            {
                free(wynik);
                return NULL;
            }
        } while (zapisano >= nelem);

        return wynik;
    }

    Pozdrawiam,
    Dr.Vee