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

sprintf - int to string

Ostatnio zmodyfikowano 2009-07-26 16:25
Autor Wiadomość
GoldWolf
Temat założony przez niniejszego użytkownika
sprintf - int to string
» 2009-07-26 09:02:45
C/C++
int main()
{
    using std::string;
    const int LINIE = 6;
    string LotyKlient[ LINIE ][ BILETY ] = { { "Test " } };
    int max = 0;
    string bufor = "MA";
   
    max = 150;
    std::sprintf(( char * ) bufor.c_str(), "%d", max );
    //LotyKlient[0][0] += "10";
    LotyKlient[ 0 ][ 0 ] += bufor;
    std::cout << LotyKlient[ 0 ][ 0 ]
    << "\tBufor = " << bufor;
   
    getch();
    return 0;
}
Mamy taki kodzik ale przy zamianie 150 na string ucina mi zero, przy okazji zapytam dlaczego dla max = 1000(liczby 4 cyfrowej) sypnie się program?
P-8777
WinerFresh
» 2009-07-26 10:51:08
bo próbujesz pisać do const char*.
Powinno być:
C/C++
stringstream stream;
stream << 13187498;
cout << stream.str();
P-8778
GoldWolf
Temat założony przez niniejszego użytkownika
» 2009-07-26 11:00:44
Akurat korzystam z liczb 2 cyfrowych, które jakoś łyka o ile nie będą miały zera w sobie. O to zero mi chodzi czyli o liczby 10, 20, 30 itp, dlaczego jest piach?
Inne liczby bardzo ładnie czyta.
P-8779
WinerFresh
» 2009-07-26 11:13:04
a wiesz, że string nie ma \0 na końcu tylko zapamiętuje liczbę znaków?? Więc i tak ciesz się, że to w ogóle zadziałało...
P-8780
DejaVu
» 2009-07-26 12:13:04
To co napisałeś Dante jest dużym zuem. Generalnie string się nie powiększa sam z siebie. Jego operatory są przeciążone i to one dopisują tekst tak, że jeśli bufor jest za mały to dokonywana jest realokacja bufora. Używając sprintf'a musisz wiedzieć jakiego rozmiaru jest bufor do którego piszesz, żeby nic nie poszło w buraki. Twój string nie zostanie realokowany (powiększony) w momencie gdy posługujesz się wskaźnikiem zwracanym przez c_str().
P-8782
GoldWolf
Temat założony przez niniejszego użytkownika
» 2009-07-26 17:42:16
Generalnie można by powiedzieć, że jest to rozwiązanie dla cyfr 0 - 9 i tyle.
Nie chciało mi się szukać innego rozwiązania bo za długo spędziłem czasu nad innymi rzeczami.
Czyli jedynym rozwiązaniem jest:
C/C++
Klasa string
int i = 42;
ostringstream ss;
ss << i;
string str = ss.str();
Ew użycie Waszych rozwiązań.
P-8797
manfred
» 2009-07-26 16:25:11
string foo = fastreams::safe_lexical_cast < int >( 666 ); /* prawdopodobnie fast_lexical_cast też zadziała */
Wymaga fastreams, do wygooglania. Jeśli nie zależy ci na szybkości, to bust::lexical_cast też może być.
P-19092
« 1 »
  Strona 1 z 1