• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd C++ unsigned long long int na string

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
535 wizyt
pytanie zadane 17 stycznia 2019 w C i C++ przez Igor Użytkownik (740 p.)

Witam

Mam pytanie dotyczące C++. Zapewne moja zwykła głupia niewiedza.

unsigned long long int i = 13793597544043915;
string tmp;
sprintf((char*)tmp.c_str(), "%llu", i);
cout<<">>"<<tmp.c_str()<<"<<"<<endl;

Dlaczego to wywala aplikacje, po prostu błąd 255 (0xFF). Pomijając fakt iż to działało a w pewnym momencie zaczęło wywalać aplikacje.

komentarz 17 stycznia 2019 przez gagyn Stary wyjadacz (11,050 p.)
Uważam, że lepiej skorzystać z std::to_string().

Nie po to piszesz w C++, żeby korzystać z bibliotek i funkcji języka C.

sprintf() - C

to_string() - C++

Poza tym, wydaje mi się, że używanie to_string() jest po prostu łatwiejsze. Wystarczy podać funkcji int jako argument, a nie bawić się w tablice char.

Jedynie zwróć uwagę, że to_string() jest od wersji C++11, dlatego musisz się upewnić, że kompilator ma ustawiną wersję przynajmniej 11.

1 odpowiedź

0 głosów
odpowiedź 17 stycznia 2019 przez criss Mędrzec (172,570 p.)

std::string sam sobie alokuje pamięć, to prawda, ale musi wiedzieć, że ma sobie zaalokować. Ty po prostu tworzysz pustego stringa i próbujesz coś pisać do jego wewnętrznego bufora. I tutaj dwie poważne uwagi:

  • skoro string jest pusty, to można być niemal pewnym, że c_str() da ci nullptr a nawet jeśli nie, to nie masz żadnej informacji o ilości tej pamięci
  • nie po to c_str zwraca const char*, żebyś to sobie castował na non-const i do tego pisał

Modyfikując twoją metodę, tak żeby było poprawnie:
zarezerwuj sobie na stosie pamięć w której na pewno zmieści się się reprezentacja "stringowa" liczby i dopiero z tego twórz stringa. Np.:

char buf[1024];
sprintf(buf, "%llu", i);
string tmp = buf;

Jak najlepiej? Skorzystać z std::to_string i mieć spokój

Podobne pytania

0 głosów
2 odpowiedzi 652 wizyt
pytanie zadane 1 listopada 2015 w C i C++ przez niezalogowany
0 głosów
6 odpowiedzi 6,315 wizyt
pytanie zadane 12 sierpnia 2015 w C i C++ przez gagyn Stary wyjadacz (11,050 p.)
0 głosów
1 odpowiedź 301 wizyt

93,440 zapytań

142,431 odpowiedzi

322,679 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...