Dulle Skrevet 18. september 2003 Del Skrevet 18. september 2003 Hei! Jeg er så godt som nybegynner i programmering og prøver å lage et program i c som kopierer en mappe med alle filer og undermapper.... Har laget en funksjon som først kopierer filer og mapper(uten innhold) i "startkatalogen", og deretter starter funkjonen rekursivt i alle de ny-opprettede mappene.. Men etter en stund kræsjer programmet med en "segmentation fault" og bare enkelte filer og mapper i treet er kopiert. Legger her ved koden............. ------------------------------------------------------------------------------------------------------------------------------------------------------------- #include <stdio.h> #include <string.h> #include <stddef.h> #include <stdlib.h> #include <dirent.h> void copy(char[150], char[150]); int main() { char malbak[150]="/home/halvor/mappe/"; char kildebak[150]="/mnt/windows/"; mkdir("/home/halvor/mappe/"); copy(kildebak, malbak); return 0; } void copy(char kildebak[150], char malbak[150]) { char mal[150]; char kilde[150]; strcpy(kilde, kildebak); strcpy(mal, malbak); int f=0; FILE* ofp; FILE* ofp2; DIR *asd; DIR *prov; struct dirent *fgf; asd = opendir(kilde); if (asd !=NULL) while(fgf=readdir(asd)) { if((strcmp(fgf->d_name , ".") == 1) && (strcmp(fgf->d_name , "..") == 1)) { strcat(kilde, fgf->d_name); strcat(mal, fgf->d_name); prov=opendir(kilde); if(prov ==NULL) {ofp=fopen(kilde, "r"); ofp2=fopen(mal, "w"); closedir(prov); } else { mkdir(mal); closedir(prov); char kildebak[150]; char malbak[150]; printf("%sn", kilde); strcpy(kildebak, kilde); strcpy(malbak, mal); strcat(kildebak, "/"); strcat(malbak, "/"); copy(kildebak, malbak); } while(f !=EOF) {f=getc(ofp); if(f !=EOF) { /* printf("%d", f);*/ fputc(f, ofp2); } } strcpy(mal, malbak); strcpy(kilde, kildebak); if(asd==NULL) ; else f=0; } if(asd==NULL) closedir(asd); } fclose(ofp); fclose(ofp2); } Lenke til kommentar
kjetil7 Skrevet 18. september 2003 Del Skrevet 18. september 2003 Har ikke hatt tid til å kikke så nøye på koden din, men her har vi vel et "stack overflow" potensiale....? En idè er kanskje å unngå rekursive kall slik som du gjør i copy funksjonen. Det er bedre å dele den opp i to i f.eks. en copy() og copy_helper() funksjon e.l. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå