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

const char * jako argument funkcji

Ostatnio zmodyfikowano 2016-11-17 22:08
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
const char * jako argument funkcji
» 2016-11-15 20:01:00
Witam.
1.Chciałbym się dowiedzieć co funkcja dostaje, kiedy jej argumentem jest
const char *
 napis.
Np.
C/C++
void zapamietaj( const char * napis )
Przesyłamy tutaj jakiś ciąg wyrazów. Ale nie możemy napisać, że przesyłamy
string
... dlaczego? Przesyłamy wskaźnik do każdego znaku z osobna (czyli
char
)? Jak prześlemy np.
zapamietaj( "napis" )
, to przesyłamy do funkcji każdy znak z osobna?
2.Przy argumentach takich jak powyżej częsty jest warning "iso c++ forbids converting a string constant to ‘char*’".
To jest tak, że w C zapis
void zapamietaj( char * napis )
 był dopuszczalny, a w C++ musi być
void zapamietaj( const char * napis )
? W C string był tablicą charów, a w C++ jest tablicą const char?
3.Przy pisaniu punktu drugiego chyba znalazłem odpowiedź na 1 problem, ale proszę mnie skorygować. Nie przesyłamy string, bo nie da się przesłać całej tablicy do funkcji, tylko przesyłamy adres jej 1-ego elementu?
P-153755
Gibas11
» 2016-11-15 20:09:39
"lel"
 =
{ 'l', 'e', 'l', '\0' }

1. Przesyłasz adres pierwszego znaku.
2. W obu był tablicą
const char
. I taka funkcja powinna brać
const char
, bo nie wydaje się by miała coś zmieniać.
3. O, jednak sam na to wpadłeś.

I zapoznaj się czym różnią się string i cstring, bo trudno zrozumieć o czym akurat piszesz.
No i w C++ nie używa się cstringów, staraj się ich unikać.
P-153757
Lich555
Temat założony przez niniejszego użytkownika
» 2016-11-15 20:59:59
Używałem funkcji strcpy(). cstring zawiera funkcje do zabawy z char * i używało się tego w C, a teraz jest trochę przestarzałe i używa się string?
@Edit
Lepiej używać strncpy(), tak?
P-153758
michal11
» 2016-11-17 16:45:11
Lepiej używać
std::string
.

Jeżeli już musisz korzystać z const char* to przeczytaj dokładnie czym jest C-string.
P-153843
karambaHZP
» 2016-11-17 19:00:12
Jeśli chcesz możesz skorzystać z std::string i przesłać go do funkcji z argumentem typu const char*, skorzystaj z metody std::string::data(), która zwraca wskaźnik na pierwszy znak stringa.
P-153848
michal11
» 2016-11-17 19:19:01
@up zamiast data polecane jest używanie std::string::c_str()
P-153851
karambaHZP
» 2016-11-17 20:44:20
@michal11 dlaczego zalecane jest c_str()?
http://www.cplusplus.com​/reference/string/string/data
Both string::data and string::c_str are synonyms and return the same value.
P-153857
michal11
» 2016-11-17 22:08:44
http://stackoverflow.com​/questions/194634​/string-c-str-vs-data
http://stackoverflow.com​/questions/1534399​/whats-the-difference-between-stdstringc-str-and-stdstringdata

ale okazuje się, że od c++11 obie funkcje są tożsame. Z tym, że na pewno jest sporo legacy kodu gdzie jest używane c_str() a nie data(), poza tym jest to bardziej verbose, od razu widać, że zwracamy c-string ze stringa a nie jakieś dane ze stringa.

Btw. trochę się zrobił bałagan w sumie z tym stringiem tak jak z używaniem size() i length().
P-153871
« 1 »
  Strona 1 z 1