Witam.
Kiedyś coś skubałem w C++ dla zabawy, jednak teraz do szkoły mam wykonać program w C kodujący tekst z użyciem kodu Cezara. Jednak napotykam dość dziwny błąd.
Na samym początku wywołanie funkcji
printf("Tekst jawny: %s", tekst);
wypisuje na ekran Tekst jawny: ♀☻▬ - w skrócie 3 losowe znaki, czyli tak, jakby odwołuje się do adresu pamięci, w której nic nie ma. Dlaczego tak się dzieje? Czy printf jest niekompatybilne z typem string?
I jeszcze jedno: na samym końcu wypisuję
printf("Tekst oryginalny: %s\nTekst zakodowany: %s", tekst, zakodowany);
Co wyświetla się na ekranie?
Tekst oryginalny: (trzy losowe znaki znowu)
Tekst zakodowany: abcdefghijklmnopqrstuvwxyz, czyli tak, jakby zmienna zakodowany była zapisywana w tym samym obszarze pamięci co zmienna tekst i ją nadpisywała.
Używam MS Visual Studio Express 2010 i przy wykonywaniu programu "krok po kroku" kodowanie tekstu działa normalnie.
Z góry dziękuję za pomoc.
#include "stdafx.h"
#include <string>
using namespace std;
int main()
{
int liczba, dlugosc, pozycje;
string tekst="abcdefghijklmonpqrstuvwxyz";
string zakodowany;
printf("Tekst jawny: %s", tekst);
zakodowany=tekst;
dlugosc=tekst.length();
printf("\n\nO ile liter chcesz przesunac kazdy znak tekstu? (Zakres 1-25): ");
scanf_s("%d", &liczba);
for(int i=0; i<dlugosc; i++)
{
if(zakodowany[i]<=122-liczba) zakodowany[i]+=liczba; // 122-indeks litery "z" w ASCII
else
{
pozycje=liczba;
while(zakodowany[i]<122)
{
zakodowany[i]++;
pozycje--;
}
if(pozycje>0)
{
zakodowany[i]=96; // znak poprzedzający literę "a" w standardzie ASCII
zakodowany[i]+=pozycje;
}
}
}
printf("Tekst oryginalny: %s\nTekst zakodowany: %s", tekst, zakodowany);
system("pause >nul");
return 0;
}