Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Łączenie łańcuchów znaków [char]

Ostatnio zmodyfikowano 2009-05-29 22:42
Autor Wiadomość
malan
Temat założony przez niniejszego użytkownika
Łączenie łańcuchów znaków [char]
» 2009-05-29 20:06:01
Witam.
Mam sobie taką funkcję:
C/C++
void StworzNowyProfil( void )
{
    char NazwaProfilu[ 25 ];
    char Sciezka[] = "profiles//"; // W tym fold. chcę zapisać plik.
    clrscr();
    cout << PL( "Podaj nazwę profilu: " );
    cin >> NazwaProfilu;
    strcat( NazwaProfilu, ".dat" ); //
    strcat( Sciezka, NazwaProfilu );
    fstream PlikProfilu( Sciezka );
    PlikProfilu.open( Sciezka, ios::out );
    if( PlikProfilu.good() ) cout << PL( "Utworzono profil!" ); else cout << PL( "Nie mogę utworzyć profilu!" );
    getch();
    return;
}
Problem polega na tym, że program tworzy plik owszem, ale gdy sprawdzam czy udało się otworzyć wyskakuje błąd. Ustaliłem, że w progr. zmienia się 'profiles//' na 'profiles/' i nie wiem dlaczego... ;/

//Edit: Jeden błąd mam - nie dodałem rozszerzenia pliku, który ma być utworzony..., ale i tak nie działa... ;/
//Edit2: Jednak z 'profiles//' jest wszystko ok...
P-7270
driver1995
» 2009-05-29 20:22:16
profiles// zmienia się na profiles/ ponieważ przy podawaniu ścieżki pisze się jednego slasha czyli profiles/ ... A chyba 2 backslashe \\ ...

//edit: No tak wszystko ok to cofam ;P
P-7272
malan
Temat założony przez niniejszego użytkownika
» 2009-05-29 20:31:09
Miałem na myśli, że 'profiles//' się nie zmienia na 'profiles/'. Program dalej nie działa (żeby ktoś mnie źle nie zrozumiał xD).
P-7274
malan
Temat założony przez niniejszego użytkownika
» 2009-05-29 20:52:51
Wszystko działa, ładnie pięknie, ale wolałbym zrozumieć jeszcze czemu mój kod nie działa... ;/ i czemu jest eksploitowalny? Ja tu dziur nie widzę ;p...
P-7276
malan
Temat założony przez niniejszego użytkownika
» 2009-05-29 23:37:44
Jak ja nie lubie tych charów ;/... Szkoda, że w 'fstream' nie można użyć string jak w 'ofstream'... Wtedy by nie było problemu... ;/, a tak wychodzą takie "kwiatki" ;/.
Masz rację tak nie może być - muszę nad tym popracować... ;p. No nic, dzięki za pomoc... ;)
P-7281
manfred
» 2009-05-29 20:38:10
Jaaa... cudownie łatwo eksploitowalny kod - pięknie podkładasz tablicę char na stos i aż się prosisz o buffer overflow...
C/C++
string filename;
cin >> filename;
ofstream plik(( "profiles/" + filename + ".dat" ).c_str() );
if( plik.fail() )
     throw std::runtime_error( "zuo przyszlo i zapisac nie dalo: " + filename );

cout << "Spx, zią!";
Potem tylko pamiętaj o łapaniu wyjątku.
P-18929
manfred
» 2009-05-29 22:42:20
Robisz na stosie 2 tablice o łącznym rozmiarze 36 bajtów, po czym zaczynasz niezłe kwiatki sadzić: odczytujesz do tablicy 25-bajt ciąg od usera, a jak sobie poda dłuższy niż 24 znaki to nadpisujemy adres ramki stosu i adres powrotu => SIGSEGV albo uruchamiamy kod kogoś innego. Potem doczepiasz do tego ".dat" - wystarczy 21 znaków do buraków.
A kod nie działa, bo dwa razy otwierasz plik.
P-18932
« 1 »
  Strona 1 z 1