Co tak naprawdę oznacza słowo "C-string" w C/C++? Wskaźnik do char? Tablica postaci? A może tablica znaków const-pointer/const?Definicja napisów C w C/C++
Odpowiedz
"Ciąg C" to tablica znaków zakończona bajtem 0 (znak null). Tablica, a nie jakikolwiek wskaźnik, to string. Zatem, dowolna końcowa podmielina ciągu C jest również ciągiem C. Wskaźniki typu char *
(lub const char *
itd.) Są często uważane za wskaźniki do ciągów znaków, ale w rzeczywistości są wskaźnikami do elementu ciągu, zwykle traktowanego jako wskaźnik do początkowego elementu ciągu znaków.
Więc wskaźniki do char nie jest ciągiem C? – FrozenHeart
@NikitaTrophimov Nr R ... powiedział bardzo dokładnie: ciąg znaków C to tablica znaków zakończona znakiem "0 \". 'char *' i 'char const *' są często używane w odniesieniu do łańcucha C, ale same nie są ciągami znaków C. –
Dziękuję bardzo! – FrozenHeart
Stała lub niezmienna tablica znaków, zakończona końcowym znakiem 0. Więc wszyscy są następujące ciągi C:
char string_one[] = { 'H', 'e', 'l', 'l', 'o', 0 };
char string_two[] = "Hello"; // trailing 0 is automagically inserted by the compiler
const char *string_three = "Hello";
Więc tablice i wskaźniki to to samo i oba mogą być traktowane jako ciąg znaków C? – FrozenHeart
@NikitaTrophimov nie, tablice i wskaźniki to nie to samo, ale w prostszych przypadkach wskaźniki można traktować jako tablice i odwrotnie. Przeczytaj tutaj: http://www.cs.bu.edu/teaching/cpp/string/array-vs-ptr/ –
Wiem, że wskaźniki i tablice to naprawdę nie to samo. Chciałbym wiedzieć, czy są jakieś różnice między nimi w znaczeniu ciągu C: – FrozenHeart
A C-ciąg jest ciągiem znaków, który jest zakończony bajtem 0, inaczej znany jako null terminated string. Dostęp do niej można uzyskać jako tablicę (char[]
) lub jako wskaźnik do pierwszego znaku (char *
).
W języku C++ istnieje inny typ ciągu o nazwie std::string
, który nie musi być zakończony przez 0 bajt. Termin C-string jest często używany przez programistów C++, gdy mają na myśli łańcuch zakończony wartością zerową, a nie typ std::string
.
Czy to nie jest "const char *"? – Mahesh
@Mahesh: Nie musi być. –
@Mahesh, To jest tak samo ważne, aby zmienić rzeczy przez dereferencję wskaźnika (może przechodzisz przez postać po znaku i trzeba coś zmienić). 'const char *' powinno się jednak zdecydowanie stosować przy wskazywaniu literałów. Być może to właśnie przekroczyło twoje umysły? – chris
Według standardu (C11 §7.1.1), A ciąg jest ciągła sekwencja znaków zakończone włącznie pierwszego znaku null, tj tablicy znaków zakończonego '\0'
.
- 1. Definicja głównego() w C
- 2. Cryptic definicja struct w C
- 3. Multiple Definicja "..." c
- 4. Czy istnieje jakaś różnica między C c; i Cc = C() ;?
- 5. stwardnienie definicja przestrzeni nazw zmiennych, C++ kompilacji
- 6. C++ "większa" definicja obiektu funkcji
- 7. C++ Nienazwana (anonimowe) nazw definicja
- 8. Serializować C# Enum Definicja JSON
- 9. wskaźnik funkcji C++ Użytkownik Definicja
- 10. tokenizer napisów w Javie
- 11. Strange definicja w C ze znakiem @
- 12. dynamiczny argumenty definicja w języku C#
- 13. Sprawdzanie listy napisów w Prologu
- 14. Co oznacza CC? = W pliku Makefile?
- 15. Definicja funkcji lub definicja zmiennej?
- 16. Dlaczego w każdej platformie C++ jest inna klasa napisów?
- 17. wstawianie napisów w dużym pliku
- 18. Definicja końca strony a definicja końca strony
- 19. mailto z wieloma adresami cc
- 20. Eksperymentowanie z tworzeniem napisów
- 21. Toolbar napisów nie pojawiają
- 22. Ustawianie SupportActionBar napisów multilinii
- 23. wprowadzenie napisów do TMemoryStream
- 24. Różnica między CC, gcc i g ++?
- 25. Pasek napisów() dla JavaScript?
- 26. Definicja funkcji w Haskell
- 27. Definicja ExpandableListView w xml
- 28. Jak uzyskać ostrzeżenia o nieprawidłowym formatowaniu napisów (C++)
- 29. Czy istnieje standardowa definicja __cplusplus w C++ 14?
- 30. : definicja ciągu wchar_t w standardzie C++ i implementacja Windows?
+1 Jest to ważna kwestia do zrozumienia, a bardzo niewiele osób zadaje sobie pytanie, co to znaczy. –