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 stringint 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 » |