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ć: 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. |
|
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. c_str strcpy |
|
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. |
|
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: Dynamiczne zarządzanie pamięcią new i delete c_str strcpy |
|
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. |
|
Rashmistrz |
» 2016-04-03 17:51:03 a... i jeszcze jedno. Wskaźnika możesz używać jak tablicy: a[ n ]; . |
|
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: char zamiana_stringa_na_char() { string tab = kategoria_miasta(); char * tablica = new char[ tab.size() + 1 ]; strcpy( tablica, tab.c_str() ); 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. |
|
carlosmay |
» 2016-04-03 20:29:45 char * zamiana_stringa_na_char() { std;: string tab = kategoria_miasta(); char * tablica = new char[ tab.size() + 1 ]; strcpy( tablica, tab.c_str() ); std::cout << tab << " literka test " << tab[ 0 ] << std::endl; std::cout << tablica << " literka test " << tablica[ 0 ] << std::endl; return tablica; }
{ char * cstr = zamiana_stringa_na_char(); std::cout << cstr << ' ' << cstr[ 0 ] << std::endl; delete[] cstr; } |
|
« 1 » 2 |