2016-11-13 6 views
-3

Also habe ich an diesem einfachen Block von Code gearbeitet. Ich möchte es drucken, wenn ich "./a.out -n" eintippeC-Programmierung und argv (Zeigerarithmetik)

Das funktioniert jedoch nicht. Ich habe auf Stackoverflow versucht, daran zu arbeiten, aber kein solches Glück. Jede Hilfe wäre willkommen.

#include <stdio.h> 
#include <stdlib.h> 
void parse_cmdline(int argc, char *argv); 
int main (int argc, char *argv[]) { 
    parse_cmdline(argc, argv); 
} 

void parse_cmdline(int argc, char *argv) 
{ 
    int x,i,m,n = 0; 
    if (*(++argv) == 'n'){ 
     x = 1; 
     printf("Output array: "); /* not being displayed*/ 
     } 
} 
+2

Sie sollten nicht erhalten Sie eine Warnung über 'char vorbei **' 'auf eine char * 'Parameter? – aschepler

+0

Ja, habe ich. Aber ich habe hier gesehen, dass du immer noch char * benutzen kannst. Also habe ich es einfach ignoriert. –

Antwort

0

Schreiben Sie einfach

if (**++argv == 'n'){ 

Und die Funktion sollte wie

void parse_cmdline(int argc, char **argv); 

Sie angeben sollten Andernfalls deklariert werden, welche Parameter an die Funktion tp geben werden. Zum Beispiel

parse_cmdline(argc, argv[1]); 

können Sie überprüfen, welche Parameter an das Programm übergeben werden, die folgende Art und Weise

int main (int argc, char *argv[]) { 
    for (int i = 0; i < argc; i++) puts(argv[i]); 
} 
+0

Ich habe das versucht, aber ich bekomme immer noch keine Ausgabe. Alles, was ich in die Eingabeaufforderung eingeben muss "./a.out -n" Schreib ich es falsch? –

+0

@KingKong Siehe meinen aktualisierten Beitrag. –

0

Versuchen:

#include <stdio.h> 
#include <stdlib.h> 

void parse_cmdline(int argc, char *argv[]); 

int main (int argc, char *argv[]) { 

    parse_cmdline(argc, argv); 
} 

void parse_cmdline(int argc, char *argv[]) 
{ 
    int x,i,m,n = 0; 
    if (*(argv[1]) == '-' && *(++argv[1]) == 'n'){ 
     x = 1; 
     printf("Output array: "); /* not being displayed*/ 
     } 
} 

Und es mit ./a.out -n laufen. Also habe ich das 0. und das 1. Zeichen des argv-Wertes auf der Position eins untersucht ("./a.out" befindet sich an Position 0 und "-n" an Position 1). Wolltest du das?

Sie können aber auch keine Warnungen ignorieren:

1.c: In function ‘main’: 
1.c:5:23: warning: passing argument 2 of ‘parse_cmdline’ from incompatible pointer type [-Wincompatible-pointer-types] 
    parse_cmdline(argc, argv); 
        ^
1.c:3:6: note: expected ‘char *’ but argument is of type ‘char **’ 
void parse_cmdline(int argc, char *argv); 

Wenn Sie schreiben parse_cmdline(argc, argv); dann parse_cmdline void parse_cmdline(int argc, char *argv[]);