Czemu printf wypisuje śmieci?

0

Mam kod:

char *ciag(char *x, char *y, char *z)
{
    char nowyciag[20] = {0};
    nowyciag[0] = *x;
    nowyciag[1] = *y;
    nowyciag[2] = *z;
    return nowyciag;
}
 
int main()
{
    char a = 'a', b = 'b', c = 'c';
    char * nowy = ciag(&a, &b, &c);
    
    printf("1) %c%c%c\n", nowy[0], nowy[1], nowy[2]);
    printf("2) %c%c%c\n", nowy[0], nowy[1], nowy[2]);

    printf("3) %c", nowy[0]);
    printf("%c", nowy[1]);
    printf("%c\n", nowy[2]);

    printf("4) %c%c%c\n", nowy[0], nowy[1], nowy[2]);
    printf("5) %c%c%c\n", nowy[0], nowy[1], nowy[2]);
    printf("6) %c", *ciag(&a, &b, &c));
    printf("%c", *(ciag(&a, &b, &c)+1));
    printf("%c\n", *(ciag(&a, &b, &c)+2));
    getchar();
    return 0;
}

W VS10 C++ Express w projekcie pod Debug printf 3) 4) 5) wypisuje śmieci. Testując w code::blocks nie mam tego problemu. O_o
Skąd takie zachowanie, przecież tu nie ma co zepsuć(?).

@Edit
mingw się rozmyślił i teraz też zaczął rzucać losowymi znaczkami

0

Po co sobie utrudniasz życie? Pisz na strumieniach cout, cin, będzie ci łatwiej.

0

mnie to obojętne czy pisze z stdio czy strumieniami; ja chce wiedzieć czemu akurat ten kod tak się zachowuje :) bo szczerze mówiąc dla mnie tam nie ma nic do zepsucia

1

Nie mozesz zwracac lokalnej tablicy z funkcji. Zrob ja statyczna badz zaalokuj pamiec dynamicznie przy kazdym wywolaniu.

ja chce wiedzieć czemu akurat ten kod tak się zachowuje

Kolejne ramki stosu tworzone przez printf nadpisuja Twoja tablice.

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