odwracanie słowa

0

Hej, chcę napisać program, który odwraca wpisane słowo. Mam coś takiego:

#include <stdio.h>
#include <string.h>

int main(void)
{
	int index, i;
	char slowo[50];
	
	printf("Podaj jakies slowo\n");
	scanf("%s", &slowo[50]);
	
	index = strlen(slowo);
	
	for( i = index-1; i >= 0; i--)
	printf("%c", slowo[i]);
	
	getchar();
	getchar();
	
	return 0;
} 

Po wpisaniu słowa pokazuje się niestety dziwny znak. Coś podobnego do ">" tylko taki zaokrąglony. Ktoś wie czym to jest spowodowane?

0

Źle wczytujesz słowo do zmiennej tablicowej. Powinno być

scanf("%s", slowo);

Poza tym tablica powinna być dynamiczna, chyba że zakładasz iż wczytane słowo nie przekroczy 49 znaków.

0
scanf("%s", &slowo[50]);

W ten sposób nadpiszesz dane w pamięci znajdujące się zaraz po Twojej tablicy.
Musisz przekazać wskaźnik na element pierwszy (zerowy) tablicy.

0

Dzięki wielkie;)

2

Taka drobna uwaga, ale ważna uwaga (liczyłem na to że znajdzie się ktoś inny który to lepiej ujmie, ale najwyraźniej nie)...

scanf("%s", cokolwiek);

Nigdy tak nie rób. W twoim przypadku, jeśli użytkownik poda słowo dłuższe niż 50 znaków, program 'wyrzuci' błąd (albo nie, zależy od fazy księżyca i pory dnia - tzn. może się wywalić, ale jeśli będziesz miał pecha to będzie czasami działał).

Dlaczego?

char slowo[50];
scanf("%s", slowo);

Słowo to tablica na 50 elementów - a to co wpisze użytkownik idzie do tej tablicy. Jeśli użyszkodnik wpisze coś dłuższego niż 50 znaków, trafi do do obszaru pamięci następującego po tablicy. Mogą się tam znajdować jakieś tajne dane umieszczone przez kompilator dla poprawnego działania programu (np. adres powrotu funkcji), inne zmienne lokalne, itd, itd. Jeśli będziesz miał szczęście, może się tam nic nie znajdować i program będzie przez pewien czas działać poprawnie.
To samo dotyczy swoją drogą funkcji gets (również potrafi zamazać pamięć)

Co gorsze, w twoim przypadku raczej nie ma się co tego spodziewać, ale gdybyś 'słowo' na przykład pobierał z internetu, sprytny 'hacker' mógłby podać takie 'słowo', żeby wykonać na twoim komputerze dowolny kod...

Można to prawidłowo rozwiązać na wiele sposobów, ale najprościej chyba dodać dwa znaki:

scanf("%49s", slowo);

Oznacza to że zostanie wczytane maksymalnie 49 znaków z klawiatury (dlaczego 49? Ponieważ ostatni wczytany znak w napisie (c-stringu) to zawsze '\0' (bajt zerowy) którego się tu nie wlicza.Tak czy inaczej trzeba zapamiętać że tablica musi być o 1 większa niż format).

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