• 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

Object Storage Arubacloud
0 głosów
457 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,590 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 468 wizyt
pytanie zadane 1 listopada 2015 w C i C++ przez niezalogowany
0 głosów
6 odpowiedzi 4,495 wizyt
pytanie zadane 12 sierpnia 2015 w C i C++ przez gagyn Stary wyjadacz (11,050 p.)
0 głosów
1 odpowiedź 195 wizyt

92,555 zapytań

141,402 odpowiedzi

319,546 komentarzy

61,939 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...