#include
#include
using namespace std;
int main(){
string a = "{\"menu\": \"file\", \"value\", \"wartość\"}";
cout << "Przykładowe dane JSON:\n" << a << endl;
int b = a.length();
cout << "Długość stringa z JSON:\n" << b << endl;
char *tab = new char[b*sizeof(char)];
for (int i=0; i<=b; i++)
{
tab[i] = 1; // na razie przypisuje cokolwiek, bo i tak sie nic nie przypisuje
}
cout << "Terazy wyświetlamy tablicę znaków zawierającą dane JSON: \n";
for (int i=0; i<=b; i++)
{
cout << tab[i] << endl; // wyswietal NIC...
}
delete [] tab;
}
std::string::length() zwraca długość ciągu bez znaku 0, a c-stringi(głównie je się używa w C/C++) muszą być null terminated dlatego jest to +1(std::string wewnątrz przechowuje normalny c-string, ale nie wiem czy to jest dyktowane standardem).
Teoretycznie nie ale praktycznie tak, gdyby nie było przechowywane c-string to jakbyś zrealizowałeś metodę c_str()? Albo dynamicznie przydzielać nową pamięć = brak kontroli nad zwolnieniami tej pamięci, albo trzymać c-string.
Po pierwsze nie null’a tylko ‘\0’ lub 0. std::string::length() czy strlen() zawsze zwracają długość tekstu a nie rozmiar bufora.