Problem mit Ragged Array



  • Hallo,

    Ich versuch hier die einzelnen Segmente eines Dateipfads in ein Array reinzubekommen. Nur will das irgendwie nicht so klappen.
    In einem kleinerm Testprogramm funktioniert das ganze aber astrein. Nur nicht hier. Ist bestimmt nur ne Kleinigkeit 😞 Aber ich komm nicht drauf

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char *argv[])
    
    {
        char pfad[]="C:\\Programme\\FH Heilbronn\\Prog1\\Source\\Testprog.c", upfad[512], npfad[512], dateiname[256];
        char *pos;
        char *feld[10];
        int i=0,j=0;
    
        printf("Der komplette Dateiname wird zerlegt:\n");
        printf("%s\n\n", pfad);
        strcpy(upfad, pfad);
    
        while( (pos = strstr(upfad, "\\")))            //suchen, ob "\" im string vorkommt
         { 
              *pos = '\0';                             //zeichen an der position \0 setzen
              printf("[%d] %s\n", j, upfad);                //ausgabe zum testen
              feld[j] = upfad;                          // Segmente ins Array reinstecken
              strcpy(dateiname, strcpy(upfad, pos+1)); //Dateiname kopieren
              j++;                                     //Zählen der Ebenen
    
         }
         feld[j+1] = (char )0; // Vektor-Ende
    
        strncpy (npfad, pfad, (strlen(pfad)-strlen(dateiname))); /*Nur den Pfad in "npfad" kopieren
                                                                 dazu wird die länge des Dateinamen von 
                                                                 den zu kopierenden bytes abgezogen */
    
        printf("Der Dateiname lautet: %s\n\n",dateiname);
        printf("Der Pfadname lautet:  %s\n\n",npfad);
        printf("Der Pfad besteht aus %d Ebenen.\n\n",j);
        for(i=0; i<j; i++) printf("Ebene[%d] = %d\n", i, feld[i]); //Array ausgabe
    //    system("PAUSE");   //AJ: Wie man eine Benutzereingabe sinnvoll erzwingt ist in der Konsolen-FAQ zu finden!
        return 0;
    }
    


  • Was funzt denn nicht?



  • anscheinend hier drin was nicht. bei
    feld[j] = upfad
    das füllen des Arrays mit strings klappt nicht

    #while( (pos = strstr(upfad, "\\")))            //suchen, ob "\" im string vorkommt
         {
              *pos = '\0';                             //zeichen an der position \0 setzen
              printf("[%d] %s\n", j, upfad);                //ausgabe zum testen
              feld[j] = upfad;                          // Segmente ins Array reinstecken
              strcpy(dateiname, strcpy(upfad, pos+1)); //Dateiname kopieren
              j++;                                     //Zählen der Ebenen
    
         }
    


  • "upfad" ist der Anfang des char-Array's, in dem deine Daten gespiechert sind - und wird es auch immer bleiben - ergo speicherst du in allen Elementen von feld (die du anfasst) die selbe Adresse.

    Versuch' mal statt dieser Kopier-Operationen das Feld "intern" zu zerlegen:

    char upfad[512];
    strcpy(upfad,pfad);
    char *pos=upfad,*pos2,*feld[10];
    while(pos2=strstr(pos,"\\")) //suche nach \
    {
      *pos2='\0';                //Stringende markieren
      feld[j]=pos;               //Adresse merken
      ++j;
      pos=pos2+1;                //für nächsten Durchlauf - Fortsetzung hinter gefundenem \
    }
    


  • öhmm ^^
    das mit den Ebenen würd ich so lösen 😃

    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
        char pfad[]="C:\\Programme\\FH Heilbronn\\Prog1\\Source\\Testprog.c";
        int x = 0, y = 0,io=0;
    
    	/* Hier werden die Ebenen in Arrayform aufgelistet ;) */
    	while(pfad[x]) pfad[x] == '\\' ? x+=1,io == 0 ? printf("\n[%i] ", y),y++ : 0 : x == 0 ? printf("[%i] %c",y++,pfad[x++]) : printf("%c",pfad[x++]);
    
    	return (0);
    }
    

    find die Zeile irgendwie nett^^

    mfg hohesC

    [edit] ganzen code gepostet... zum besseren verstehen[/edit]


Anmelden zum Antworten