Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Visual C++] Dołączenie tekstu do char*

Defice 20 Mar 2012 09:01 1429 7
  • #1
    Defice
    Level 25  
    Witam, potrzebuje zrobić konstruktor kopiujący który prócz kopiowania doda to kopiowanego tekstu ciąg znaków.

    Code: cpp
    Log in, to see the code


    Tak wygląda mój kod, jednak kompilator rzuca się o użycie przeze mnie strcat wyrzucając następujący komunikat:

    Quote:
    Warning 1 warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.


    Jak to cholerstwo można inaczej rozwiązać ?
  • #2
    myinventions
    Level 10  
    Cześć,

    kompilator informuje Cię tu, że użycie funkcji strcat nie zawsze jest bezpieczne, funkcja ta oczywiście kopiuje podany tekst w podane miejsce, ale Ty sam musisz zadbać o wystarczającą ilość miejsca w 'book.pTitle'. Jeśli będziesz kopiował zbyt duży tekst, to niestety program się wywali.
    Zatem funkcji 'strcat' używaj tylko gdy jesteś 100% pewny że program nie przekroczy wielkości tej zmiennej.

    W Warningu kompilator podpowiada użycie funkcji strcat_s, działa ona podobnie, ale podajesz jej trzeci parametr, który mówi jaką długość ma zmienna do której kopiujesz, funkcja wtedy zadba żeby nie kopiować znaków powyżej tej długości.

    Na wszelki wypadek dodam, że 'book.pTitle' powinieneś mieć zdeklarowane np. w formie 'char pTitle[100]', na pewno nie tak 'char *pTitle'.
  • #3
    Defice
    Level 25  
    Niestety muszę się trzymać tego char *pTitle bo tak jest w zadaniu (to projekt na uczelnię); w innym przypadku już dawno wsadziłbym tam zwykłego stringa i zrobił to tak:

    Code: cpp
    Log in, to see the code


    Niestety muszę użyć char pointera :/ Jeśli chodzi natomiast o strcat_s, to kompilator nie umie go rozpoznać. Co trzeba "zainlcudować", aby można było go używać?
  • #5
    myinventions
    Level 10  
    A to w tym przypadku musisz dynamiczne zarezerwować pamięć pod tablicę znaków używając funkcji 'malloc(...)' podając jej ilość znaków do zarezerwowania (plus jeden zapasu na '\0'). Ale nie zapomnij potem w destruktorze zwolnić tej pamięci funkcją 'free(...)'.
  • #6
    Defice
    Level 25  
    Mógłbyś podać najprostszy przykład takiej alokacji ?
  • Helpful post
    #7
    myinventions
    Level 10  
    Code: cpp
    Log in, to see the code


    Tak z głowy kod, nie mam czasu teraz sprawdzić. Oczywiście trzeba poczytać o funkcjach malloc i free i zrobić obsługę błędów.[/code]
  • #8
    Defice
    Level 25  
    Wielkie dzięki, przyda się