Sformatuj to ładnie to łatwiej będzie analizować:
int main(int argc, char *argv[]) {
int i, j, dlugosc;
char napis1[10];
char napis2[10];
gets(napis1);
dlugosc = strlen(napis1);
for (i = dlugosc; i >= 0; i++)
{
for (j = 0; j <= dlugosc; j++)
napis1[i] = napis2[j];
}
printf("%s", napis2);
if (strcmp(napis1, napis2) == 0)
{
printf("true");
}
return 0;
}
A zacina się z bardzo prostego powodu:
for (i = dlugosc; i >= 0; i++)
Zamiast dekrementować i
to je inkrementujesz. Pomijając już fakt że wychodzisz poza maksymalny indeks.
Zobacz co robisz:
- Wczytujesz napis od użytkownika do zmiennej
napis1
.
- Nadpisujesz
napis1
śmieciami z napis2
(w pętli for).
Wszystko dlatego że te nazwy zmiennych są złe, gdybyś miał coś takiego:
const int size;
char original[size];
char reversed[size];
To założę się że nie popełnił byś takiego błędu.
Te dwie pętle nigdy nie zadziałają, bo cały czas będziesz nadpisywał całą tablicę.
Mógłbyś zrobić coś takiego:
for(i = dlugosc - 1, j = 0; i >= 0; i--, j++)
{
napis2[j] = napis1[i];
}
To będzie działać dopóki będziesz pewny że napis2
pomieści wszystko co jest w napis1
.
Nie powinieneś również używać gets()
bo jest to funkcja niebezpieczna - nie sprawdza rozmiaru bufora.
Możesz za to użyć fgets()
:
fgets(napis1, sizeof(char) * 10, stdin);
napis1[strcspn(napis1, "\n")] = 0;
Za pomocą strcspn()
pozbywamy się znaku nowej linii.
A jeszcze lepiej jak pozbędziesz się magicznej 10 i zrobisz np.
int main(int argc, char *argv[])
{
const int size = 10;
char napis1[size];
char napis2[size];
fgets(napis1, sizeof(char) * size, stdin);