Wie übergibt man einen const char * Pfad an fts_open? Ich möchte einen filePath übergeben.Wie übergebe ich einen const char * Zeiger an fts_open()
Antwort
Ich nehme an, Sie möchten wissen, wie Sie diesen einzelnen Pfad an den argv
(Typ char const **
) Parameter von fts_open
übergeben können. Dieser Parameter wird so beschrieben:
argv
ist ein NULL-terminierten Array von Zeichenzeiger Namensgebung einen oder mehrere Pfade, die die Dateihierarchie bilden.
Sie müssen also ein Array der Länge zwei erstellen, dessen Elemente vom Typ char*
sind. Setzen Sie Ihren Pfad in das erste Element und setzen Sie NULL in das zweite Element. Wie folgt aus:
char const *argv[] = { path, NULL };
können Sie jetzt argv
-fts_open
passieren.
Dennoch, fts_open akzeptiert nur 'char * const *' anstelle von 'const char * const *': -/ –
Sie können nicht-const-Zeiger an eine Funktion übergeben, die const-Zeiger akzeptiert. In const-Korrektheit weist die Funktionssignatur darauf hin, dass die Funktion die Daten, auf die das Argument verweist, nicht ändert. In diesem Fall ändert 'fts_open' nicht den Inhalt von' argv' oder die Werte, auf die seine Elemente zeigen. – tomlogic
Aber ich war ein bisschen schlampig in meiner ursprünglichen Version. Ich habe jetzt die passenden 'const' Qualifier hinzugefügt. Das heißt, ich vermute, dass das Vorhandensein von "const" es für Helium3 nur erschwert, die doppelte Indirektion zu verstehen. Aus Gründen der Darstellung kann es manchmal besser sein, sich auf ein Thema zu konzentrieren. –
Das erste Argument zu fts_open()
ist, "ein NULL terminiertes Array von Zeichenzeigern, die einen oder mehrere Pfade benennen, aus denen die Dateihierarchie besteht."
So könnte man es so passieren:
char *pathlist[2];
pathlist[0] = filePath;
pathlist[1] = NULL;
fts_open(pathlist, ...);
- 1. Wie übergebe ich einen Zeiger auf eine Funktion
- 2. Globale const Char Zeiger-Array in C++
- 3. C: „static const char * const“ auf „static const char *“
- 4. Wie übergeben Sie den Vektor der Zeichenkette an foo (char const * const * const)?
- 5. Wie übergebe ich einen Verzeichnispfad an os.execvp
- 6. printf% s const char *
- 7. Wie kopiere ich einen Wert mit const unsigned char * type?
- 8. Cython wie man char ** in const char ** umwandelt?
- 9. Wie übergebe ich Redux-Status an Unterstrecken?
- 10. const (char) * kann nicht
- 11. const char * Initialisierung
- 12. Warum kann ich in C nicht 'char **' in 'const char * const *' umwandeln?
- 13. const Zeiger als Konstruktorargument
- 14. Unterschied zwischen statischem const char * und const char *
- 15. C++: Bedeutung der const char * const *
- 16. typedef 'n einen Zeiger und const
- 17. Pass char * zu const char * in c
- 18. Bedeutung von "char * _EXFUN (index, (const char *, int));"
- 19. Wie bekomme ich einen nichtkonstanten Iterator, während ich einen const "this" -Zeiger verwende?
- 20. Kompilierzeichenfolgen: Konstruktorüberladung Vorrang zwischen 'const char * `/` const char [] `
- 21. const char * Verkettung
- 22. ungültige Konvertierung von 'const char *' in 'char *'
- 23. Unterschied zwischen const char * p und char const * p
- 24. Wie übergebe ich einen optionalen Closing-Parameter an eine Funktion?
- 25. MATLAB: Wie übergebe ich einen Parameter an eine Funktion?
- 26. Wie übergebe ich einen dynamischen Wert an eine andere Ansichtsseite
- 27. Wie übergebe ich Chef-Datenbeutel an einen Andock-Container?
- 28. Wie übergebe ich einen Bereich an Enum.filter in Elixir?
- 29. Wie übergebe ich Argumente an einen Java-Instrumentierungsagenten?
- 30. Wie übergebe ich Parameter an einen Junit-Test von Ant?
Ich denke, das Thread ein schönes Beispiel, wie die akzeptierte Antwort hat http://stackoverflow.com/questions/983376/recursive-folder-scanning-in -c – Mikhail