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

problematyczne wskaźniki

Ostatnio zmodyfikowano 2013-12-01 17:03
Autor Wiadomość
nologin
Temat założony przez niniejszego użytkownika
problematyczne wskaźniki
» 2013-11-30 21:51:02
Kolejne zadanie z symfonii, tym razem rozdział o wskaźnikach(zadanie XLVIII).
Problem pojawia się przy drugiej pętli for. Pierwsza pętla działa poprawnie, a druga wyświetla 10 razy ,, to jest linijka nr 9". Dlaczego nie wyświetla ,, to jest linijka nr 0", ,, to jest linijka nr 1" aż do numeru 9 tak jak poprzednia pętla?

C/C++
#include <iostream>
using namespace std;
char ** kreator_tablicy();
int main()
{
    char ** linijka = kreator_tablicy();
    for( int i = 0; i < 10; i++ )
    {
        linijka[ i ] = new char[ 80 ];
       
        char tekst[ 25 ] = "to jest linijka nr    ";
        tekst[ 21 ] =( i + '0' );
        linijka[ i ] = tekst;
        cout << linijka[ i ] << "\n";
    }
   
    /*
    char* schowek = linijka[3];
    linijka[3] = linijka[6];
    linijka[6] = schowek;                   dalsza czesc zadania polegajaca  na zamianie miejscami elem 3 i 6. Chwilowo wylaczylem aby nie zaciemniala sprawy
    */
    for( int i = 0; i < 10; i++ )
    {
        cout << linijka[ i ] << "\n";
    }
   
}



char ** kreator_tablicy()
{
    char ** w;
    w = new char *[ 10 ];
    return w;
}
P-97962
pekfos
» 2013-11-30 22:02:59
Niepoprawnie kopiujesz tekst i nie zwalniasz tablicy.
P-97963
nologin
Temat założony przez niniejszego użytkownika
» 2013-11-30 22:09:54
Można prosić o rozwinięcie, bo dalej nie rozumiem natury problemu
P-97964
pekfos
» 2013-11-30 22:14:14
Wskaźnik nie przechowuje tekstu, więc przypisaniem niczego nie kopiujesz.
P-97966
nologin
Temat założony przez niniejszego użytkownika
» 2013-12-01 16:37:48
Poddaje się. Nie wiem jak to naprawić, aby nie oznaczało to przepisanie linijka w linijkę kodu stąd: http://forum.pclab.pl/topic/737100-Symfonia-C-Standard-Jerzy-Grębosz-odpowiedzi-do-ćwiczeń/
P-98028
pekfos
» 2013-12-01 16:40:59
C/C++
linijka[ i ] = tekst;
Przepisz tę linię, aby używała strcpy().
P-98029
nologin
Temat założony przez niniejszego użytkownika
» 2013-12-01 17:03:42
Dziękuję za pomoc. Ostatecznie kod wygląda tak:

C/C++
#include <iostream>
#include <cstring>
using namespace std;
char ** kreator_tablicy();
int main()
{
    char ** linijka = kreator_tablicy();
    for( int i = 0; i < 10; i++ )
    {
        linijka[ i ] = new char[ 80 ];
       
        char tekst[ 25 ] = "to jest linijka nr    ";
        tekst[ 21 ] =( i + '0' );
        strcpy( linijka[ i ], tekst );
        cout << linijka[ i ] << "\n";
    }
   
   
    char * schowek = linijka[ 3 ];
    linijka[ 3 ] = linijka[ 6 ];
    linijka[ 6 ] = schowek;
   
    for( int i = 0; i < 10; i++ )
    {
        cout << * linijka << "\n";
        delete[] * linijka;
        * linijka++ = 0;
    }
   
}



char ** kreator_tablicy()
{
    char ** w;
    w = new char *[ 10 ];
    return w;
}
P-98035
« 1 »
  Strona 1 z 1