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

strncpy () - warning przy próbie użycia

Ostatnio zmodyfikowano 2017-01-04 21:15
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
strncpy () - warning przy próbie użycia
» 2017-01-03 22:53:16
Witam.
Mam taki fragment kodu:
C/C++
class wizytowka
{
    char * nazw, * imie;
public:
    //konstruktor
    wizytowka( const char * n, const char * im );
    //konstruktor kopiujacy
    wizytowka( const wizytowka & wzor );
    //destruktor
    ~wizytowka();
    //operator przypisania
    wizytowka & operator =( const wizytowka & wzor );
};
//*****************************************
wizytowka::wizytowka( const char * n, const char * im )
{
    nazw = new char[ strlen( n ) + 1 ];
    imie = new char[ strlen( im ) + 1 ];
   
    strncpy( nazw, n, sizeof( nazw ) ); //blad
    strncpy( imie, im, sizeof( imie ) ); //blad
   
    cout << "Pracuje zwykly konstruktor\n";
}
Przy kompilacji wyrzuca mi takie warningi:
warning: argument to 'sizeof' in 'char* strncpy(char*, const char*, size_t)' call is the same expression as the destination; did you mean to provide an explicit length ?
Czemu wywala mi taki błąd?
P-155927
michal11
» 2017-01-03 22:57:19
przekaz do funkcji strlen(n) zamiast sizeof(nazw).
P-155928
pekfos
» 2017-01-03 23:25:33
przekaz do funkcji strlen(n)+1 zamiast sizeof(nazw).
P-155930
j23
» 2017-01-04 10:23:16
Użyj po prostu strcpy.
P-155934
mokrowski
» 2017-01-04 11:10:00
Nie używaj "po prostu strcpy()" :-/ Nie używaj (jeśli naprawdę nie jesteś podstawiony pod ścianą) wywołań na surowych tablicach i c-stringach. Przeczytaj to http://man.cx/strncpy(3)/pl oraz to https:/​/www.securecoding.cert.org​/confluence/display/c​/STR07-C.+Use+the+bounds-checking+interfaces+for+string+manipulation.
W twoim programie powinno być strlen(n) + 1 oraz zapewnienie że jest terminacja '\0' bufora na dane.
P-155935
pekfos
» 2017-01-04 11:27:55
Się czepiasz. Tu bufor jest specjalnie podstawiony pod tego stringa. Może użyć nawet i memcpy().
P-155937
mokrowski
» 2017-01-04 12:11:52
@pefkos, a niech robi co chce. Pyta to odpowiadam w ramach tego co twierdzę że jest rzetelne. A rzetelność != "czepianie się".
P-155940
j23
» 2017-01-04 15:11:59
Widzisz, mokrowski, jak byś był taki rzetelny, to zwróciłbyś uwagę na to, że nie sprawdza, czy parametry n i im nie są null. A dywagowanie o wyższości strncpy nad strcpy w tym konkretnym przypadku jest kompletnie zbędne (pekfos wyjaśnił dlaczego).
P-155956
« 1 » 2
  Strona 1 z 2 Następna strona