Odpowiedz
Nie możesz. Nie bez wiedzy o tym, co znajduje się wewnątrz wskaźników, lub przechowywania tych danych z wyprzedzeniem.
+1, ale zastanawiam się, ile reinkarnacji tego pytania zostanie udzielonych bez wskazania licznych duplikatów. –
Masz na myśli liczbę ciągów w tablicy?
Jeśli tablica została przydzielona na stosie w tym samym bloku, można użyć sztuczki sizeof(foo)/sizeof(foo[0])
.
const char *foo[] = { "abc", "def" };
const size_t length = sizeof(foo)/sizeof(foo[0]);
Jeśli mówisz o argv
przeszedł do głównego, można spojrzeć na parametrze argc
.
Jeśli tablica została przydzielona na stercie lub przekazana do funkcji (gdzie rozpadnie się na wskaźnik), nie masz szczęścia, chyba że ktoś, kto go przydzielił, również przekazał ci rozmiar.
Jeśli tablica jest statycznie przydzielona, można użyć funkcji sizeof()
. Tak więc zadziałałby sizeof(foo)/sizeof(char *)
. Jeśli tablica została utworzona dynamicznie, masz kłopoty! Długość takiej tablicy normalnie byłaby jawnie przechowywana.
EDYCJA: janków ma oczywiście rację, sizeof
jest operatorem.
Warto również zauważyć, że C99 nie pozwala na sizeof
na tablicach o zmiennych rozmiarach. Jednak różne kompilatory implementują różne części C99, więc pewna ostrożność jest uzasadniona.
sizeof jest operatorem, a nie funkcją. Używanie sizeof na wyrażeniu (w przeciwieństwie do nazwy typu) nie wymaga nawet nawiasów klamrowych. – janks
- 1. Jak znaleźć długość niepodpisane char * w C
- 2. Jak uzyskać długość napisu?
- 3. C++ Jak uzyskać długość tablicy wskaźnika?
- 4. Jak uzyskać długość IStream? C++
- 5. Jak uzyskać długość ciągu znaków
- 6. Jak uzyskać adres elementów w tablicy char?
- 7. uzyskać długość tablicy ciągów o nieznanej długości
- 8. Jak uzyskać długość std :: stringstream bez kopiowania
- 9. Jak uzyskać długość pliku w Go?
- 10. python, jak uzyskać przydzieloną iobytes długość pamięci?
- 11. Python: Jak uzyskać długość itertools _grouper
- 12. Jak uzyskać długość tablicy wskaźnika C?
- 13. Jak uzyskać bieżącą długość odpowiedzi z http.ResponseWriter
- 14. Jak uzyskać długość łańcucha w Perlu?
- 15. uzyskać długość `wchar_t *` w C++
- 16. mysql: jak obcinać długość pola
- 17. uzyskać wskaźnik do tablicy C char Swift
- 18. Char Array VS Char *
- 19. nieprawidłowy konwersji z „const char *” do „char *” [-fpermissive]
- 20. Jak znaleźć długość argv [] w C
- 21. Dodatek C char do char *
- 22. Jak uzyskać długość tablicy w C? Czy "sizeof" jest rozwiązaniem?
- 23. Swift: AVPlayer - Jak uzyskać długość pliku mp3 z adresu URL?
- 24. C# Reflection: jak uzyskać wartości i długość tablicy?
- 25. Jak uzyskać szerokość/wysokość/długość siatki w THREE.js
- 26. Jak utworzyć instancję i uzyskać długość wielowymiarowej tablicy/macierzy?
- 27. Jak uzyskać długość zaznaczonej tablicy pól wyboru javascript
- 28. Jak uzyskać długość ciągu w bajtach w nodejs?
- 29. Jak uzyskać długość wyniku wyszukiwania() w pliku Ember.js
- 30. Jak uzyskać długość bieżącej grupy w grupie data.table?
jest zakończone nul –
'char ** foo' nie jest tożsame z' char * foo [] 'http://stackoverflow.com/questions/2448204/why-does-this-generate-a-segmentation-fault/2448255 # 2448255 –
Pytanie nie ma sensu bez kontekstu. 'char * foo []' może oznaczać zupełnie różne rzeczy w różnych kontekstach. – AnT