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

Dynamiczna tablica dwuwymiarowa typów *char

Ostatnio zmodyfikowano 2012-11-25 19:43
Autor Wiadomość
nowax
Temat założony przez niniejszego użytkownika
Dynamiczna tablica dwuwymiarowa typów *char
» 2012-11-25 17:00:50
Witam!
Staram się zadeklarować tablicę dynamiczną dwuwymiarową. Ma mieć ona mniej więcej taką postać:
C/C++
cBuffer[ 0 ] = "adfdssdk";
cBuffer[ 1 ] = "00110011110110";
...
cBuffer[ iNum ] = "tra la la";
Chcę do niej skopiować iNum ilość zmiennych typu string. Zamierzam to zrobić w ten sposób:
copy( strBuffer[ j ].begin(), strBuffer[ j ].end(), cBuffer[ j ] );

A teraz na temat deklaracji: napisany kod zamieszczam poniżej. Czy jest on poprawny? Bo coś nie do końca mi się zgadza poprawność deklaracji tej zmiennej (no i wyskakują mi błędy w dalszej części programu po przekonwertowaniu zmiennych strBuffer do cBuffer). Nie powinno być tak, że jeden jej wymiar jest typu int, a drugi typu *char? Jeśli ktoś potrafi to bardzo proszę o wytłumaczenie.
C/C++
//Declaration of conversion parameters
...
string strFinal_coord;
strFinal_coord.reserve( 6 * sizeof( int ) );
...

//Declaration of buffer
string * strBuffer = new string[ iPoint_num ];

char ** cBuffer = new char *[ iPoint_num ];
for( int i = 0; i < iPoint_num; i++ )
{
    cBuffer[ i ] = new char[ sizeof( strFinal_coord.size() + 1 ) ];
}
...

//Show frames of points coordinates and convert them into *char type
for( int j = 0; j < iPoint_num; j++ )
{
    cout << strBuffer[ j ] << endl;
    copy( strBuffer[ j ].begin(), strBuffer[ j ].end(), cBuffer[ j ] ); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
...

for( int i = 0; i < iPoint_num; i++ )
     delete[] cBuffer[ i ];

delete[] cBuffer;

delete[] strBuffer;
...
P-69864
Admixior
» 2012-11-25 19:43:24
C/C++
strFinal_coord.reserve( 6 * sizeof( int ) );
//linijke wyżej rezerwujesz 24 bajty na 24 znaki (rozmiar dalej 0). Czy na pewno o to chodziło?

cBuffer[ i ] = new char[ sizeof( strFinal_coord.size() + 1 ) ];
//tutaj rezerwujesz sobie po 4 bajty (4 znaki) do każdego - po co to sizeof?
//a po za tym size() i tak zwróci 0 bo tylko zarezerwowałeś miejsce

cout << strBuffer[ j ] << endl; //wypisujesz stringi strbuffer
copy( strBuffer[ j ].begin(), strBuffer[ j ].end(), cBuffer[ j ] );
//a teraz je nadpisujesz tym co jest w tablicach char
//czy to nie chodziło o na odwrót?
P-69880
« 1 »
  Strona 1 z 1