2012-03-30 7 views
0

Was sind die Standard-Argv-Datentypen?Standardargv-Argumenttypen

Ich möchte 2 Argumente aus der cmd-Zeile und übergeben Sie diese Argumente an fts_open mit der Rückkehr auf fts_read festgelegt wird. Der erste Pfad des Quellordners und der zweite Pfad der Ausgabedatei.

Ich habe zuvor argv + 1 übergeben und es das erste Argument, sowie das zweite Argument gesendet, so dass die Quelle und der Ausgabepfad in den zu durchlaufenden Pfaden enthalten war.

Ich möchte nur Quellpfad für fts_open verwendet werden.

Ich weiß, fts_open nimmt eine NULL terminierte Liste, ich möchte dies aus dem ersten Argument, der Quelle erstellen. Ich hatte vorher einige Warnungen bezüglich verschiedener Datentypen.

Ich möchte nur die erste Arg und greifen Sie es in einem char * und dann erstellen Sie eine NULL terminierte Liste von diesem zu fts_open übergeben.

+0

Wie argv [1] und argv [2]? – vmpstr

+0

Ja, aber als ich Argv [1] an fts_open übergeben habe, hat es argv [2] in die Pfade eingeschlossen, die es durchquert hat. – jarryd

Antwort

1

Sie müssen Kopie das Argument in Frage zu einer neuen Liste, die nur enthält dieses Argument und den letzten Nullzeiger

int main(int argc, char **argv) { 
    if (argc < 2) /* error */; 
    char **copy = malloc(2 * sizeof *copy); 
    copy[0] = malloc(strlen(argv[1]) + 1); 
    if (!copy[0]) /* error */; 
    strcpy(copy[0], argv[1]); 
    copy[1] = NULL; 

    whatever(copy/*, ... */); 

    /* ... */ 

    free(copy[0]); 
    free(copy); 
} 
+0

Das hat funktioniert, danke. – jarryd

2

Die direkte Antwort auf die Titelfrage ist char **, aber ich denke nicht, dass das wirklich eine Menge Hilfe für Sie ist.

Zumindest, wenn ich richtig verstehe, was Sie wollen, ist so etwas wie dieses:

char *args[2]; 

args[0] = argv+1; 
args[1] = NULL; 

fts_open(args); 
1

Wenn Ihre main Funktion Signatur (int, char**), dann das zweite Argument ist der Zeiger auf das erste Element einer nullterminierte Array von char*, von denen jedes selbst ein Zeiger auf das erste Element eines nullterminierten Arrays von char s ist, die die Programmargument-Strings darstellen.

Sie können sie wie folgt drucken:

for (char ** p = argv; *p; ++p) 
{ 
    printf("Argument: %s\n", *p); 
} 

Oder sie von der Rückseite zu drucken:

while (argc--) { printf("Argument %i: %s\n", argc, argv[argc]); }