Obsługa błędów (wskaźniki)

Odpowiedz Nowy wątek
2011-01-28 17:33
Anonim:P
0

Napisałem funkcję i chcę uzyskać opis błędu (jeśli taki nastąpi) za pomocą wskaźników.

 int funkcja(int arg,int* nrb, char** opbledu)

O ile w przypadku numeru błędu (nrb) nie mam problemów z jego uzyskaniem (w ciele funkcji nrb=5, potem odczytuje nrb) to już w przypadku opisu, który jest tablica znaków, nie mogę sobie poradzić :(

Pozostało 580 znaków

2011-01-28 19:21
0
*opbledu = new char[100];
strcpy(*opbledu,"blad");

poza funkcja:

int nrbledu;
char* opbledu;
int a = funkcja(1234,&nrbledu,&opbledu);
printf("%s\n",opbledu);
delete [] opbledu;

░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq, 2011-01-28 19:22
Auć! Używajcie strncpy, bo się kiedyś mocno zdziwicie ;) - Kumashiro 2011-01-28 19:44
strcpy jest szybsze bo nie sprawdza czy przekroczylo zakres tablicy, a skoro znam dlugosc tablicy i dlugosc tekstu ktory kopiuje to jaki sens ma uzywanie wolniejszej funkcji? a tak a propos to z reguly do wyswietlania jakis zmiennych zamiast strcpy uzywam najczesciej sprintfa ktory jest rownie niebezpieczny, ale za to jaki wygodny (jak nie znam dlugosci wypisywanego tekstu to wtedy zaczynam zastanawiac sie czy nie lepiej uzyc jakiejs funkcji - a jak ktos sie uczy to wole nie odwracac mu uwagi uzywaniem bezpiecznych funkcji wymagajacych wiekszej ilosci parametrow) - krwq 2011-01-29 00:06
W powyższym przypadku (kopiowanie komunikatu błędu) szybkość ma marginalne znaczenie. Co do "znam długość tablicy", to kiedyś grzebałem w takim projekcie, gdzie programista też wiedział jaka będzie maksymalna długość łańcucha. Później format danych się nieco zmienił i kopiowanie wjeżdżało na sąsiednie tablice powodując, że aplikacja (dość spora) zachowywała się inaczej niż powinna ;) - Kumashiro 2011-01-31 12:35

Pozostało 580 znaków

2011-01-28 20:03
0

przeciez tablica znajdujaca sie w funkcji (opbledu) usunie sie automatycznie po zakonczeniu funkcji wiec jak chcesz pokazac ja wskazniekiem pozniej w funkcji printf

*opbledu = new char[100]; tak stworzona tablica insnieje do końca programu - Macron 2011-01-28 20:07

Pozostało 580 znaków

2011-01-29 11:46
:)
0

Dzięki, wszystko działa:P

Pozostało 580 znaków

2011-01-29 13:07
0

proponuje:

    *err = new char[strlen("opis bledu")];
    strcpy(*err,"opis bledu");

opis bledu mozna walnac do jakiedos #define. a tym sposobem upewniamy sie ze zawsze zostanie zaalokowane tyle pamieci ile trzeba.


!user image
I am he who watches they. I am the fist of retribution. That which does quell the recalcitrant. Dare you defy the Warchief? Dare you face my merciless judgement?
jak już to *err = new char[strlen("opis bledu") + 1]; co by było gdzie wcisnąć NULL'a jak na razie to masz tu buffer overflow ;) - byku_guzio 2011-01-29 13:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0