• 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

0 głosów
88 wizyt
pytanie zadane 17 stycznia w C i C++ przez Igor Użytkownik (540 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 przez gagyn Mądrala (6,160 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 przez Criss Mędrzec (172,300 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 159 wizyt
pytanie zadane 1 listopada 2015 w C i C++ przez niezalogowany
0 głosów
6 odpowiedzi 438 wizyt
pytanie zadane 12 sierpnia 2015 w C i C++ przez gagyn Mądrala (6,160 p.)
0 głosów
2 odpowiedzi 232 wizyt
pytanie zadane 11 września 2016 w C i C++ przez rubiikk Obywatel (1,890 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

65,727 zapytań

112,367 odpowiedzi

237,225 komentarzy

46,687 pasjonatów

Przeglądających: 108
Pasjonatów: 0 Gości: 108

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...