2011-11-12 11 views
7

Czy ten fragment kodu jest prawidłowy, czy powoduje niezdefiniowane zachowanie?Wywołanie c_str pustego ciągu znaków

std::string s; 
assert(strlen(s.c_str())==0); 

Jeśli to nie jest niezdefiniowane zachowanie, czy powyższa asercja przejdzie?

Odpowiedz

5

Tak to będzie działać (jeśli dołączyć () do c_str aby faktycznie wywołania funkcji) i twierdzenie minie.

1

To błąd kompilacji (jeśli masz włączone potwierdzenia), ponieważ const char *(std::string::*)(), nie można przekonwertować na const char *.

(Tongue tylko do połowy w policzek.)

7

To jest doskonale zdefiniowane, a twierdzenie mija. Funkcja c_str() zawsze zwraca poprawny łańcuch C zakończony zerem.

Zwykle używa się pustej(), aby przetestować pusty ciąg.

Powiązane problemy