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

Problem z dynamicznym przydzielaniem pamieci

Ostatnio zmodyfikowano 2011-11-10 23:50
Autor Wiadomość
Savail
Temat założony przez niniejszego użytkownika
Problem z dynamicznym przydzielaniem pamieci
» 2011-11-10 23:31:55
Hej,
Natknalem sie na problem ktorego nie moge zrozumiec i rozwiazac... Otoz ponizsza funkcja find ma za zadanie zwrocic C string z danego parametru line tak dlugi dopoki nie dojdzie do znaku end. Problemem jest to ze zwracany C string oprocz wlasciwych liter zawiera tez jakies losowe znaki i nie mam pojecia jak sie ich pozbyc... Powinien zwrocic "file:" a zwraca "file:" + 2 znaki nie wiadomo skad ;/ Bylbym ogromnie wdzieczny za pomoc.
C/C++
char * find( const char * line, int line_length, char end );

int main()
{
    std::cout << find( "file: somefile", 19, ' ' );
}

char * find( const char * line, int line_length, char end )
{
    char * old_data = new char[ line_length ];
    char * new_data = NULL;
    int counter = 0;
    while( line[ counter ] != end && counter < line_length )
    {
        old_data[ counter ] = line[ counter ];
        counter++;
    }
    new_data = new char[ counter ];
    memcpy( new_data, old_data, counter );
   
    if( counter < line_length )
         return new_data;
    else
         return "false";
   
}
P-43712
DejaVu
» 2011-11-10 23:34:56
Każdy łańcuch znaków w stylu C jest zakończony znakiem terminalnym (czyli znakiem o kodzie ASCII 0). Po tym znaku są śmieci.
P-43715
Savail
Temat założony przez niniejszego użytkownika
» 2011-11-10 23:38:28
no ale przeciez dla C stringa ktory ma byc zwrocony w funkcji przydzielam rozmiar rowny ilosci elementow ktore ma pomiescic. Wiec jakim cudem wyswietla jeszcze smieci? Juz od dobrej godziny nie moge tego rozkminic...
P-43716
DejaVu
» 2011-11-10 23:41:02
Jeżeli łańcuch znaków ma 5 znaków to w rzeczywistości zajmuje on 6 znaków.
P-43717
Drraven
» 2011-11-10 23:47:00
Bufor musi być równy długości tekstu + 1 znak na '\0' własnie;
czyli:
char buffor[ legth( tekst ) + 1 ];
P-43719
Savail
Temat założony przez niniejszego użytkownika
» 2011-11-10 23:48:42
Dzieki wielkie za odpowiedzi.
Czy to znaczy ze zwroconemu C stringowi powinienem zmniejszyc rozmiar aby sie normalnie wyswietlal?
C/C++
int main()
{
    std::string found = find( "file: somefile", 19, ' ' );
    found.resize( found.length() - 2 );
    std::cout << found;
}
Teraz np w koncu wyswietla sie normalnie ale musialem mu zmniejszyc rozmiar az o 2. To wlasnie tez dziwne ze w moim programie pokazywaly sie 2 znaki dodatkowe(smieci) a skoro tak jakby 1 znak jest dodawany to niby powinien sie 1 smiec dodatkowo wyswietlac...
P-43720
DejaVu
» 2011-11-10 23:50:03
Dojdź do rozwiązania sam. Masz wskazówki w czym leży problem - druga opcja to poczytać dokumentację.
P-43722
« 1 »
  Strona 1 z 1