[gelöst] string-array als Parameter in Funktion funktioniert nicht richtig



  • Hallo c-community,

    Habe ein Problem mit einem String-Array, welches ich an eine Funktion übergeben möchte. Folgende Situation habe ich derzeit:

    eine Hilfsfunktion

    char** malloc_StringArray(int argc, ...)
    {
      char *temp;
      char **tmpArray;
      tmpArray = malloc(argc * sizeof *tmpArray);
      va_list zeiger;
    
      va_start(zeiger, argc);
    
      int i;
      for (i = 0; i <= argc-1; i++)
      {
         temp = va_arg(zeiger, char*);
         tmpArray[i] = malloc(strlen(temp) * sizeof(char));
         tmpArray[i] = temp;
      }  
      return tmpArray;
    }
    

    in der main-Funktion

    char **StringArray;
    StringArray = malloc_StringArray(2, "--help", "-h");
    // !bis hierhin funktioniert das Programm!
    InfoFunction(2, StringArray, argv[i], Help, Error_Unknown_Option);
    

    die fehlerhafte Funktion

    int InfoFunction(int argc, char **argvCompareRange, char *argsCompareValue, NextFuncPtr nextFuncPtr, NextErrFuncPtr errFuncPtr)
    {
    
      int verificateNextFunction;
      verificateNextFunction = -1;
      int i;
      for (i = 0; i <= argc - 1; i++)
      {
        printf("%s\n", argvCompareRange[i]); //erster Durchlauf ok, danach kommt Segmentation fault beim Ausführen der Datei (nicht beim Kompilieren
        if(strcmp(argsCompareValue, argvCompareRange[i]) == 0)
        {
          verificateNextFunction = 0;
        }
      }
      if (verificateNextFunction == 0) nextFuncPtr;
      else errFuncPtr;
    }
    

    Ok ich weiß anscheinend funktioniert etwas nicht mit der Übrgabe meines String-Arrays. Ein Zugriff auf dieses vor der InfoFunction ist problemlos. In der InfoFunction aber nicht mehr. Wo habe ich meinen Denkfehler? Habe ich die Übergabe mit

    char **argvComparerange
    

    falsch gemacht?

    mirrowwinger



  • Die Strings werden in malloc_StringArray nicht richtig verarbeitet.

    tmpArray[i] = malloc((strlen(temp) +1) * sizeof(char)); // +1 für '\0'
    //     tmpArray[i] = strcpy(temp; // Hier überschreibst du den Inhalt von tmpArray[i]
         strcpy(tmpArray[i],temp); // Strings werden in C kopiert
    


  • jupp hattest Recht

    Vielen Dank
    mirrowwinger


Anmelden zum Antworten