Problem nie zwracania prawidłowego stringa w C

Odpowiedz Nowy wątek
2020-03-25 01:22

Rejestracja: 1 miesiąc temu

Ostatnio: 6 dni temu

0

Bardzo prosiłbym o pomoc, w sprawie dlaczego, w środku funkcji string1 jest taki jaki ma być, a kiedy chcę go wypisać w mainie, tablica czy string zawiera "śmieci". W mainie wypisuje na konsole uzywając printf i wtedy pojawia się problem.

char* szyfruj(char* tab, char* klucz) 
{
    int k =strlen(tab);
    int j = 0;
    int l= strlen(klucz);
    char string1[50];
    strcpy_s(string1, sizeof string1, tab);
    for (int i = 0; i < k; i++)
    {
        if (string1[i] == ' ' || string1[i] == '\n')
        {
            ;
        }
        else
        {
            if (j < l)
            {
                string1[i] = (char)(((int)string1[i] + (int)klucz[j] - 130) % 26 + 65);
                j++;
            }
            else
            {
                j = 0;
                string1[i] = (char)(((int)string1[i] + (int)klucz[j] - 130) % 26 + 65);
                j++;
            }
        }

    }
    printf("%s\n", string1);
    return string1;

Pozostało 580 znaków

kq
2020-03-25 01:25
kq
Moderator C/C++

Rejestracja: 6 lat temu

Ostatnio: 37 sekund temu

Lokalizacja: Szczecin

Zwracasz wskaźnik do obiektu który znika wraz z zakończeniem działania funkcji (notabene: to UB). Alokuj pamięć za pomocą malloc i pochodnych, lub przyjmuj parametr wyjściowy, na którym będziesz operował.


Pozostało 580 znaków

2020-03-25 01:26

Rejestracja: 1 miesiąc temu

Ostatnio: 6 dni temu

0

Wielkie dzięki za pomoc, wszystko już jasne!!

No nie wszystko. Ten alokowany wewnątrz funkcji bufor trzeba zwolnić po wykorzystaniu. "Szkolny" main() to wybacza, ale tak powinno być w każdym realnym programie. - AnyKtokolwiek 2020-03-25 01:31

Pozostało 580 znaków

Odpowiedz

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