Łączenie stringów

0

Cześć, chcę stworzyć kod który połączy mi ze sobą dwa pierwsze znaki wprowadzonego stringu. Zmajstrowałem taką funkcję, która ostatecznie crashuje program. Jakieś propozycje?

char* data_urodzenia(char* pesel){
char* pesel_rok1 = pesel[0];
char* pesel_rok2 = pesel[1];
strcat(pesel_rok1, pesel_rok2);

return pesel_rok1;
}

2

W 2 linijce, przypisujesz do wskaźnika na char wartość znakową, czyli przykładowo dla A - 0x41.
Do tego nie rozumiesz jak działa funkcja strcat, odsyłam do dokumentacji: http://www.cplusplus.com/reference/cstring/strcat/.
A co do problemu, to w zasadzie wystarczy zrobić tak, strcat jest tu niepotrzebne, a nawet niewskazane:

int main() {
    char c[3];
    const char* pesel = "12345";
    c[0] = pesel[0];
    c[1] = pesel[1];
    c[2] = 0;
    printf("%s\n", c);
}
0

No dobra, dalem to w osobnej funkcji, zwracam poprzez "return c", na jednym komputerze działa jak trzeba w printf("Rok: %s",data_urodzenia(pesel)); a na moim zwraca Rok: <null>, co może być nie tak?

2

c jest zmienną lokalną, więc po wyjściu z funkcji przestaje istnieć. To co robisz to undefined behaviour, więc każde zachowanie programu jest teoretycznie możliwe.

0

Tak, ale robię to w ten sposób:

w main() mam taki kod:

printf("Rok urodzenia: %s",data_urodzenia(pesel));

Gdzie pesel jest typu *char ** pobranym przez scanf.

A funkcja wygląda następująco:


char* data_urodzenia(char* pesel){
    char c[3];
    const char* peselx = pesel;
    c[0] = peselx[0];
    c[1] = peselx[1];
    c[2] = 0;

    return c;
}

Więc teoretycznie wszystko powinno działać tak jak trzeba - a tak niestety nie jest.
Co ciekawe, na jednym komputerze funkcja działa prawidłowo, czyli zwraca dwie pierwsze cyfry numeru pesel a na moim komputerze to nie działa i zwraca <null>

2

Absolutnie nie powinno działać jak trzeba. (Co najwyżej może, fartem do tego). Jak wspomniał @twonek c jest zmienną lokalną, i istnieje ona tylko w obrębie funkcji data_urodzenia.
Przekaż wskaźnik do tablicy przez argument.

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