dodatkowe znaki przy printf napisu

dodatkowe znaki przy printf napisu
RO
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
0

http://pastebin.com/wpvWNw7x
kod cezara. Ogólny zarys działania programu.
Wczytuję tekst z klawiatury do tablicy znakow: wczytywany_tekst[100]. Przy okazji zliczam jego dlugosc: liczba_wczytanych_znakow. Następnie przepisuję już odszyfrowany tekst do nowej tablicy znaków: char przerobiony_tekst[dlugosc_tekstu].

Problem pojawia się przy wypisywaniu: printf("%s, przerobiony_tekst). Na końcu odszyfrowanego napisu czasem wyrzucany jest znak: $, znak ascii254, czy (.

wie ktos dlaczego tak się dzieje?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:4 dni
2

Napis musi się kończyć znakiem '\0'


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
RO
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
0

a wskazałbyś mi proszę w którym miejscu zignorowałem ten fakt? Bo przejrzałem kod pod tym kątem i dalej nie wiem gdzie jest błąd

edytowany 1x, ostatnio: Robertt
twonek
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
1
Kopiuj
int dlugosc_tekstu = wczytywanie_tekstu(&wczytywany_tekst[0]);
char przerobiony_tekst[dlugosc_tekstu];

I wstaw kod do posta.

fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0
Kopiuj
        printf(" Wpisz tekst: ");
        scanf("%99s", buffor);
        sscanf(buffor, "%s%n", wczytywany_tekst, &liczba_wczytanych_znakow);

powiedz mi gdzie tutaj dodajesz do wczytywany_tekst "nul terminator" ( w sensie '\0')

bo po tym kodzie od razu juz robisz jakies operacje na wczytywany_tekst. Wiec przy wypisuwaniu wczytywany_tekst moze znasz jego dlugosc, ale printf nie zna. Wiec wyswietla dopoki nie trafi na nul terminator ;)

Zobacz pozostały 1 komentarz
fasadin
nadal tutaj nie widze ze zwraca (dodaje) nul terminator
fasadin
chyba ze chodzi Ci o to always store the null terminator in addition to the matched characters. The size of the destination array must be at least one greater than the specified field width.
RO
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:5
0

super! dzięki wielkie

twonek
problem masz przy wypisywaniu przerobiony_tekst, a nie wczytywany_tekst (wczytywany_tekst powinien poprawnie się wyświetlić), który wynika z błędu przy tworzeniu tablicy do przechowywania przerobiony_tekst: http://4programmers.net/Forum/1217833
RO
rzeczywiście błąd nie jest tam gdzie wskazuje reszta. Ale dalej nie rozumiem co robię źle przy deklaracji tablicy przerobiony_tekst
twonek
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
2

rzeczywiście błąd nie jest tam gdzie wskazuje reszta. Ale dalej nie rozumiem co robię źle przy deklaracji tablicy przerobiony_tekst

Przecież dlugosc_tekstu to liczba znaków w tekście wejściowym, czyli tablica przerobiony_tekst ma dokładnie tyle miejsc. No to gdzie jest dodatkowe miejsce na znak '\0'?
Nie mówiąc już o tym, gdzie masz operację dodania tego znaku do przerobiony_tekst?

RO
poprawione, ale nie mogę zrozumieć czemu automatycznie nie jest wstawiany znak '\0' na końcu zadeklarowanej tablicy
twonek
A dlaczego miałby być wstawiany? To jest tablica pojedynczych znaków, a to że traktujesz całość jako ciąg to już Twoja własna sprawa.
RO
super, szkoda że nie mogę dać więcej plusów ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.