Jak zamienić char* na string i na odwrót?

2015-01-12 21:43
Autor
0

Jak zamienić char* na string? I na odwrót? Są do tego specjalne funkcje?

Pozostało 580 znaków

2015-01-12 21:47
1
const char* c = "ala ma kota";
string s(c);
const char* d = s.c_str();

Pozostało 580 znaków

2015-01-12 21:53
4

No no, z tym drugim to bym uważał. Wynik c_str() jest gwarantowany TYLKO w czasie wywołania funkcji. Później już nie i trzymanie takiego wskaźnika to proszenie sie o guza.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
oczywiście, good point - twonek 2015-01-12 22:11

Pozostało 580 znaków

2015-01-12 22:05
Autor
0

Ja chce przekonwertować z string do char nie const char bo funkcja do zapisu plików potrzebuje takiego typu argumentu.

class CFile
{
    public:
    bool LoadFile(std::string path);
    void SaveFile(std::string path);
    void SaveFile(std::string path, char* buff, int len);
    ~CFile();
    char * buffer;
    int length;
};
bool CFile::LoadFile(std::string path)
{
    std::fstream file;
    file.open( path, std::ios::binary | std::ios::in );
    if ( file.good() )
    {
       file.seekg( 0, std::ios::end );
       length = file.tellg();
       file.seekg( 0, std::ios::beg );

       buffer = new char [length];
       file.read( buffer, length );
       //std::cout << &buffer;
       file.close();
       return 1;
    }
    return 0;
}
void CFile::SaveFile(std::string path)
{
    std::fstream file( path, std::ios::out | std::ios::binary);
    file.write( buffer, length );
    file.flush();
    file.close();
}
void CFile::SaveFile(std::string path, char* buff, int len)///TA FUNKCJA
{
    std::fstream file( path, std::ios::out | std::ios::binary);
    file.write( buff, len );///TUTAJ
    file.flush();
    file.close();
}
CFile::~CFile()
{
    delete [] buffer;
}
ten kod to jedna wielka głupota - spartanPAGE 2015-01-12 22:09
Wywal ten kod czym prędzej. Napisz co próbujesz tym osiągnąć. - _13th_Dragon 2015-01-12 23:20

Pozostało 580 znaków

2015-01-12 22:09
3
Shalom napisał(a):

No no, z tym drugim to bym uważał. Wynik c_str() jest gwarantowany TYLKO w czasie wywołania funkcji. Później już nie i trzymanie takiego wskaźnika to proszenie sie o guza.

Nieprawda.

Zasady unieważniania tego wskaźnika sa takie same jak zasady unieważniania iteratorów dla std::string. Czyli są 2 przypadki:

  • Jeżeli obiekt tej klasy zostanie użyty jako argument funkcji z biblioteki standardowej, przekazany przez referencję która nie ma const.
  • Jeżeli wywołana zostanie funkcja składowa klasy, która nie jest const.
    (21.4.1.5)

"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju, 2015-01-12 22:15
Trochę przesadziłem, ale faktem jest że kontrolowanie co sie dzieje ze stringiem z którego wyciągnęliśmy tego c-stringa może okazać sie trudne, albo możemy coś zwyczajnie przeoczyć. Szczególnie że zapisanie sobie tego na boku zwykle oznacza że chcemy tego używać przez dłuższy czas, inaczej użylibyśmy c_str() po prostu. - Shalom 2015-01-12 23:11

Pozostało 580 znaków

2015-01-12 23:29
Autor
0

Mam

char * buffer;

tworze tablice

buffer = new char [length];

zapisuje

file.write( buffer, length );

i chciałbym to przenieść do stringa;

std::string str;

Ale nie wiem jak.

pierwsza odpowiedź 2 linijka! - MarekR22 2015-01-13 09:08

Pozostało 580 znaków

2015-01-12 23:56
0

Przenieść do string'a to co zapisałeś już do pliku, po kiego?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2015-01-13 09:19

Pozostało 580 znaków

2015-01-13 09:15
0

pseudokod: do nowej zmiennej przypisz starą zmienną char jako string

Pozostało 580 znaków

2015-01-13 13:05
Autor
0

Ja chciałbym napisać aplikacje, która wczyta plik (dowolny), do tego ta klasa, prześle ją przez internet używam do tego pakietów sfml a ładuje do nich std::string bo char array jest trudniej. A że jak pisałem klasa wczytująco/zapisująca dane działa na char to przed wysłaniem i po wysłaniu muszę konwertować string/char*.
Konwersje zrobiłem tym sposobem:

std::string str(file.buffer);

Ale kopiuje się tylko 8 znaków.
Jak sprawdzałem rozmiar string to przy wczytanym pliku ponad 20 000 bajtów string ma tylko 8 znaków. Nie wiem dlaczego, i nie wiem co z tym zrobić.
Ale jak zrobię tak to string ma więcej niż osiem znaków.

std::string str("dlugitekstdostringa");

Pozostało 580 znaków

2015-01-13 13:39
0

Jeżeli kopiuje się tylko 8 znaków to znaczy że 8-y znak jest znakiem końca napisu.
Zacznij używać do tego celu strumieni, np stringstream
Przepisanie z jednego strumienia do drugiego jest błyskawiczne.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-13 18:48
Autor
0

Nie za bardzo mi wychodzi string ma tylko cztery znaki.
Próbuje tak:

ss << file.buffer; //z char*buffer do strngstream
ss >> str; //z stringstream do std::string

:/

dodanie znacznika <code class="cpp"> - @furious programming

edytowany 1x, ostatnio: furious programming, 2016-12-13 18:26
Wstawiaj kod w znaczniki kolorujące składnię; - furious programming 2015-01-13 18:57

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0