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 KleinigkeitAber 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]