sprintf - int to string
Ostatnio zmodyfikowano 2009-07-26 16:25
GoldWolf Temat założony przez niniejszego użytkownika |
sprintf - int to string » 2009-07-26 09:02:45 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 ] += 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? |
|
WinerFresh |
» 2009-07-26 10:51:08 bo próbujesz pisać do const char*. Powinno być: stringstream stream; stream << 13187498; cout << stream.str(); |
|
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. |
|
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... |
|
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(). |
|
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: Klasa string int i = 42; ostringstream ss; ss << i; string str = ss.str(); Ew użycie Waszych rozwiązań. |
|
manfred |
» 2009-07-26 16:25:11 string foo = fastreams::safe_lexical_cast < int >( 666 ); Wymaga fastreams, do wygooglania. Jeśli nie zależy ci na szybkości, to bust::lexical_cast też może być. |
|
« 1 » |