Argumente übergeben

Buba235

Erfahrenes Mitglied
Hallo!


Ich hab mal ne banale Frage. Wie kann ich Argumente aus der Hauptfunktion main in eine andere Funktion übergeben?

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


int main(int argc, char *argv[]) {
   int i;
   for(i = 0; i < argc; i++) {
      printf("argv[%d] = %s ", i, argv[i]);
      printf("\n");
   }
   return EXIT_SUCCESS;
}

Wenn ich jetzt z.B. will dass in einer anderen Funktion (z.B. Fkt. tuwas()) das erste Argument von argv (also argv[1]) überprüft wird und wenn es dann "Hallo" ist, dann so er z.B. "Erfolg" ausgeben. Wie geht das denn? In dem Code oben werden nur immer die Argumente am Bildschirm ausgegeben, die eingegeben wurden. Das soll er ja auch weiterhin machen.
 
Hallo!


Hat sich erledigt. Ich hab es rausgefunden:

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


void tuwas(char*);


int main(int argc, char *argv[]) {
   int i;
   for(i = 0; i < argc; i++) {
      printf("argv[%d] = %s ", i, argv[i]);
      printf("\n");
   }
   return EXIT_SUCCESS;
}

void tuwas(char argv[]) {
   int i;
   char hallo[] = "Hallo";

   for(i = 0; i < 2; i++) {
      if (argv[i] == *hallo) {
         printf("%s\n", "Es hat geklappt!");
      }
   }
}

Das wäre die Lösung, falls es jemadn interessiert!
 
Hm da war ich wohl zu voreilig! Klappt doch nicht so wie ich das wollte. Hat da jemand einen Ansatz?
 
Hallo,

was hast du denn vor bzw was klappt nicht?
Die main Methode so wie sie oben steht ist in Ordnung...

Gruß

RedWing
 
Achso,
tuwas soll ja auch aufgerufen werden :)

Also du kannst 2 Strings nicht einfach mit == vergleichen....
Dafür gibt es die Methode strcmp, siehe
Code:
man strcmp

Edit:

Außerdem sollte es glaube heißen:

Code:
void tuwas(char** argv) {
   int i;
   char* hallo[] = {"Hallo", "Welt"};

   for(i = 0; i < 2; i++) {
      if (strcmp(argv[i],hallo[i]) == 0) {
         printf("%s\n", "Es hat geklappt!");
      }
   }
}

Gruß

RedWing
 
Zuletzt bearbeitet:
Hallo!

Also folgendes funktioniert nicht:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void tuwas(char**);


int main(int argc, char *argv[]) {
   int i;
   for(i = 0; i < argc; i++) {
      printf("argv[%d] = %s ", i, argv[i]);
      printf("\n");
      tuwas(argv[i]);
   }
   return EXIT_SUCCESS;
}

void tuwas(char **argv) {
   int i;
   char *hallo[] = ("Hallo", "Welt");

   for(i = 0; i < 2; i++) {
      if (strcmp(argv[i], hallo[i]) == 0) {
         printf("%s\n", "Es hat geklappt!");
      }
   }
}

Warnung: Übergabe des Arguments 1 von tuwas von inkompatiblen Zeigertyp (bei tuwas(argv[i]))
Fehler: ungültige Initialisierung (bei char *hallo[] = ("Hallo", "Welt");)
 
Wenn Du das so machen willst, mußt Du auch das ganze Array übergeben:
Code:
 tuwas(argv);
 
Hallo,

schaumal hier:

C:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int search_parm_in_list(char*, char**, size_t);


int main(int argc, char *argv[]){
   int i;
   char* list[] = {"Hallo", "Welt"};
   for(i = 0; i < argc; i++){
    if(search_parm_in_list(argv[i], list, sizeof(list) / sizeof(char*)) >= 0)
        printf("'%s' gefunden!\n", argv[i]);
   }
   return EXIT_SUCCESS;
}

int search_parm_in_list(char *parm, char** list, size_t list_size){
   int i = 0;
   for(i = 0; i < list_size; i++){
      if (strcmp(parm, list[i]) == 0)
        return i;
   }
   return -1;
}

Gruß,

RedWing
 
Hallo!

Also es funktioniert in sofern, als dass er mir nichts ausgibt, solange das Wort Hallo (erstes Argument nach dem Programmnamen) in den Argumenten nicht vorkommt. Kommt es vor, dann gibt er mir aus: "Es hat geklappt!" - Das ist ja auch sehr erfreulich, weil genau das will ich ja, aber er gibt mir bei z.B. dem Aufruf ./programmname Hallo Blabla folgendes aus:
argv[0]: ./programmname
Es hat geklappt!
argv[1]: Hallo
Es hat geklappt!
argv[2]: Blabla
Es hat geklappt!

Er gibt es mir also immer aus, sobald das Wort Hallo vorkommt. Das will ich aber nicht. Ich möchte dass er mir Es hat geklappt! nur ausgibt wenn er das Wort Hallo findet. Ansonsten eben nur die normale Ausgabe, die die main erzeugt.


Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void tuwas(char**);


int main(int argc, char *argv[]) {
   int i;
   for(i = 0; i < argc; i++) {
      printf("argv[%d] = %s ", i, argv[i]);
      printf("\n");
      tuwas(argv);
   }
   return EXIT_SUCCESS;
}

void tuwas(char **argv) {
   int i;
   char *hallo = "Hallo";

   for(i = 0; i < 2; i++) {
      if (strcmp(argv[i], hallo) == 0) {
         printf("%s\n", "Es hat geklappt!");
      }
   }
}
 
Hallo!


Danke vielmals, denn das hab ich gemeint! Es klappt auch so wie ich das wollte. Also danke nochmal!
 
Zurück