Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Tablica char, ze zmiennej string

Ostatnio zmodyfikowano 2016-04-03 20:58
Autor Wiadomość
Blon
Temat założony przez niniejszego użytkownika
Tablica char, ze zmiennej string
» 2016-04-02 20:47:08
Witam, mam następujący problem.
Chcę zadeklarować / wypełnić nową tablicę char, ze zmiennej string
Pierwotna postać:
C/C++
string a = kategoria_miasta();
char tablica[] = a;
cout << tablica << endl;
Za proste, aby działało. Oczywiscie wysypuje się w 2 linijce. Myślałem, że główny problem to 2 różne typy zmiennych, ale tab char, zmienna char, tez nie chce działać.
Ktoś podpowie jakims linkiem, kodem, cokolwiek? :)
Dziękuje z góry.
P-146906
Rashmistrz
» 2016-04-02 20:51:23
Metoda .c_str() zwraca wskaźnik na tablicę char,
której nie można modyfikować, z pewnością ci się przyda.

» standard C++ » stringc_str
» standard Cstrcpy
P-146908
Blon
Temat założony przez niniejszego użytkownika
» 2016-04-02 21:03:03
Próbowalem tego użyć, bo znalazłem na necie identyczny temat, jednak sie nie kompiluje. I w takim razie chyba nie do końca rozumiem komunikat, bo nie umiem tego rozwiązać,

array must be initialized with a brace-enclosed initializer

Ok, dziś zrobię sobie już przerwę, jak znam hasło kluczowe, to jutro sie tym o swieżej głowie pobawie i dam znać.
Dzieki.
P-146909
Rashmistrz
» 2016-04-02 21:06:34
Utwórz wskaźnik na char:
char * a = NULL;
.
// wskaźnik NULL wskazujący na nic dla bezpieczeństwa

Zaalokuj potrzebną pamięć (tam skopiujemy łańcuch):
a = new char[ str.length() + 1 ]
.
// +1, nie zapominajmy o zerze, którego w stringu nie ma.

Użyj funkcji strcpy() do skopiowania
łańcucha znaków, zwróconego przez metodę .c_str() ...

Nie zapomnij zwolnić obszar,
gdy przestaniesz korzystać z tej tablicy znaków:
delete[] a;

____________________________________________________

Wszystkie odnośniki:
» Kurs C++Dynamiczne zarządzanie pamięcią new i delete lekcja
» standard C++ » stringc_str
» standard Cstrcpy
P-146910
carlosmay
» 2016-04-02 21:20:13
nie zapominajmy o zerze, którego w stringu nie ma.
Raczej jest, tylko nie jest brany pod uwagę do wartości długości łańcucha.
P-146914
Rashmistrz
» 2016-04-03 17:51:03
a... i jeszcze jedno.
Wskaźnika możesz używać jak tablicy:
a[ n ];
.
P-146943
Blon
Temat założony przez niniejszego użytkownika
» 2016-04-03 20:20:16
Dziekuję wam Panowie za wskazówki, działa tak jak chciałem (a przynajmniej tak narazie myślę ;-)) Jest tylko 1 mały zonk, którego jeszcze nie rozgryzłem, oto kod:

C/C++
char zamiana_stringa_na_char() {
   
    string tab = kategoria_miasta();
    // string b="b";
    char * tablica = new char[ tab.size() + 1 ];
    strcpy( tablica, tab.c_str() );
    //delete[]tablica;
    cout << tab << " literka test " << tab[ 0 ] << endl;
    return tab;

Mianowicie błąd jest w ostatniej linijce, nie wiem jak zwrócić cała tablice char do głownego programu / funkcji

Wpisując 'return tab[0];' kompilator łapie, jednak dalej w głownym programie / funkcji, nie moge tego zczytać, nie wiem czy to sprawa wskaźników, bo dopiero 1 raz tutaj używałem.
P-146948
carlosmay
» 2016-04-03 20:29:45
C/C++
char * zamiana_stringa_na_char() {
   
    std;: string tab = kategoria_miasta();
    // string b="b";
    char * tablica = new char[ tab.size() + 1 ];
    strcpy( tablica, tab.c_str() );
    std::cout << tab << " literka test " << tab[ 0 ] << std::endl; // tego sprawdzenia nie kumam
    std::cout << tablica << " literka test " << tablica[ 0 ] << std::endl; // chyba tak miało być
    return tablica; // zwraca wskaźnik na tablicę cstring
}

// int main()
{
    char * cstr = zamiana_stringa_na_char(); // przypisanie zwróconego wskaźnika
    std::cout << cstr << ' ' << cstr[ 0 ] << std::endl;
    // ...
    delete[] cstr; // zwolnienie pamięci
}
P-146949
« 1 » 2
  Strona 1 z 2 Następna strona