Filepointer an Methode übergeben
-
Sieht aber im weiteren Programmverlauf nicht so aus, als wenn er das braucht.
-
DirkB schrieb:
Er möchte wohl ein
Belli schrieb:
Sieht aber im weiteren Programmverlauf nicht so aus, als wenn er das braucht.
Genau. Was man möchte und was man braucht, ist nicht immer das gleiche
.
-
Also das was ich hier gepostet habe, ist halt nur nen kleines Beispiel für mich um den Sachverhalt zu verstehen.
#include <stdio.h> #include <stdlib.h> #include <string.h> # void printen(FILE **array_filepointer) // die Adresse meines Filepointers wird übergeben { fprintf(*array_filepointer,"Hallo ich bin KLaus und du bist maus"); return; } int main() { int anzahl=6; char array_filename[anzahl][50]; // erzeuge array was 6 verschiedene Dateinamen enthält char array_filepointer[anzahl][50]; // warum das hier? Ich habe in meinem richtigen Code 6 verschiedene Programme um eine Liste zu füllen, mit head und/oder back pointer sortiert/unsortiert //von jedem Prog messe ich die Zeit und möchte diese in eine seperate Datei schreiben, deshalb brauch ich doch auch 6 Filepointer zu meinen 6 verschiedenen .txt Dateien. oder würde einer reichen dessen Wert ich via for schleife immer auf die neue Datei bringe? int i; for (i=0; i<6; i++) // hier werden die Arrays beschrieben { sprintf(array_filename[i],"filename%d",i); sprintf(array_filepointer[i], "Datei%d",i); } for(i=0; i<6; i++) { FILE *array_filepointer[i]; // hier kommt das was ich evtl. noch nicht zu 100% verstanden habe - ich habe in meinem array einen text gespeichert und möchte diesen nun als var.-name benutzen also FILE* array_filepointer[i] oder int array_filepointer[i] oder double array_filepointer[i] , ganz egal. geht das? array_filepointer[i]=fopen(array_filename[i],"w"); // Filepointer bekommt die adresse von meiner .txt datei zugewiesen. printen(&array_filepointer[i]); //Adresse des filepointers wird übergeben um den wert dieser adresse also meinen filepointer dann in der Funktion zu benutzen. fclose(array_filepointer[i]); } return 0; }
Falls ich irgendwas falsch verstanden habe bin ich für jeden Tipp sehr dankbar.
mfg
-
nippler92 schrieb:
#include <stdio.h> #include <stdlib.h> #include <string.h> # void printen(FILE **array_filepointer) // die Adresse meines Filepointers wird übergeben //Du brauchst aber die Adresse doch gar nicht, es genügt den Filepointer selbst zu übergeben { fprintf(*array_filepointer,"Hallo ich bin KLaus und du bist maus"); return; } int main() { int anzahl=6; char array_filename[anzahl][50]; // erzeuge array was 6 verschiedene Dateinamen enthält char array_filepointer[anzahl][50]; // warum das hier? Ich habe in meinem richtigen Code 6 verschiedene Programme um eine Liste zu füllen, mit head und/oder back pointer sortiert/unsortiert //von jedem Prog messe ich die Zeit und möchte diese in eine seperate Datei schreiben, deshalb brauch ich doch auch 6 Filepointer zu meinen 6 verschiedenen .txt Dateien. oder würde einer reichen dessen Wert ich via for schleife immer auf die neue Datei bringe? int i; for (i=0; i<6; i++) // hier werden die Arrays beschrieben { sprintf(array_filename[i],"filename%d",i); sprintf(array_filepointer[i], "Datei%d",i); } for(i=0; i<6; i++) { FILE *array_filepointer[i]; // hier kommt das was ich evtl. noch nicht zu 100% verstanden habe - ich habe in meinem array einen text gespeichert und möchte diesen nun als var.-name benutzen also FILE* array_filepointer[i] oder int array_filepointer[i] oder double array_filepointer[i] , ganz egal. geht das? //Du erstellst hier in jedem Schleifendurchlauf ein neues Array vom Type //FILE*, nacheinander mit 0 - 6 Elementen (jeweiliger Wert von i) //Dieses Array benutzt Du aber gar nicht sinnvoll array_filepointer[i]=fopen(array_filename[i],"w"); // Filepointer bekommt die adresse von meiner .txt datei zugewiesen. //Hier schreibst Du immer hinter das gerade erstellte Array //wenn i == 2 ist, hat Dein Array die Element 0 und 1, Du schreibst aber in //Element 2, das es gar nicht gibt printen(&array_filepointer[i]); //Adresse des filepointers wird übergeben um den wert dieser adresse also meinen filepointer dann in der Funktion zu benutzen. //Wieso gibst Du hier die Adresse des Filepointers weiter, und nicht den //Filepointer selbst, wie ich es Dir ein paar Postings zuvor vorgemacht habe? fclose(array_filepointer[i]); //und hier wird das Array wieder zerstört, weil der Scope zu Ende ist, //in der Zwischenzeit hast Du nur einen einzigen Wert in bzw. hinter das Array //geschrieben, Du brauchst also gar kein Array } return 0; }
Falls ich irgendwas falsch verstanden habe bin ich für jeden Tipp sehr dankbar.
mfg
-
Deine Version mit 6 Dateinamen und Handles
#include <stdio.h> #include <stdlib.h> #include <string.h> void printen(FILE *array_filepointer) // die Adresse meines Filepointers wird übergeben { fprintf(array_filepointer,"Hallo ich bin KLaus und du bist maus"); return; } int main() { int anzahl=6; char array_filename[anzahl][50]; // erzeuge array was 6 verschiedene Dateinamen enthält FILE *array_filepointer[6]; // Da kommen schon die Filepointer rein und keine Dateinamen int i; for (i=0; i<6; i++) // hier werden die Arrays beschrieben { sprintf(array_filename[i],"filename%d",i); } for(i=0; i<6; i++) { array_filepointer[i]=fopen(array_filename[i],"w"); // Filepointer bekommt die adresse von meiner .txt datei zugewiesen. } for(i=0; i<6; i++) { printen(array_filepointer[i]); } for(i=0; i<6; i++) { fclose(array_filepointer[i]); } return 0; }
Gleiche Funktionalität mit 1 Dateinamen und Handle
#include <stdio.h> #include <stdlib.h> #include <string.h> void printen(FILE *array_filepointer) // die Adresse meines Filepointers wird übergeben { fprintf(array_filepointer,"Hallo ich bin KLaus und du bist maus"); return; } int main() { int anzahl=6; char array_filename[50]; // erzeuge array was 6 verschiedene Dateinamen enthält FILE *array_filepointer; int i; for (i=0; i<6; i++) // hier werden die Arrays beschrieben { sprintf(array_filename,"filename%d",i); array_filepointer=fopen(array_filename,"w"); // Filepointer bekommt die adresse von meiner .txt datei zugewiesen. printen(array_filepointer); fclose(array_filepointer); } return 0; }
BEide Ungetestet und evtl mit kleinen Fehlern.
-
@ Belli ich habs noch nichts umgeschrieben, weil ich's verstehen wollte bevor ich's umschreibe.
Also kurz zusammenfassen,
nen Filepointer dynamisch zu gestallten ist nicht notwenig wenn ich ihn in einer schleife nacheinander auf verschiedene Dateien zeigen lasse.
also:schleifendurchgang 1
Filepointer = fopen("name1","w");
datei beschrieben
fclose(Filepointer)schleifendurchgang 2
Filepointer = fopen("name2","w");
datei beschrieben
fclose(Filepointer).
.
.richtig?
-
Die Tatsache, dass du deinen fehlerhaften Originalcode wieder aufschreibst und die hier gegebenen Hinweise nicht berücksichtigst, deutet darauf hin, dass du das Problem nicht verstanden hast bzw. sogar nicht verstehen willst.
-
#include <stdio.h> #include <stdlib.h> #include <string.h> # void printen(FILE* array_filepointer) { fprintf(array_filepointer,"Hallo ich bin KLaus und du bist maus"); return; } int main() { int anzahl=6; char array_filename[anzahl][50]; FILE* array_filepointer; int i; for (i=0; i<6; i++) { sprintf(array_filename[i],"filename%d",i); array_filepointer[=fopen(array_filename[i],"w"); printen(array_filepointer[i]); fclose(array_filepointer[i]); } return 0; }
An einem richtigen Code kann ich nicht erklären wie ich evtl. falsch gedacht hab an meinem falschen code geht das schon...
-
Ich weiß zwar nicht, was Du mit 'Filepointer dynamisch gestalten' meinst, aber das tust Du ja gar nicht.
Wie ich in Deinem obigen Text per Kommentar ergänzt habe, erstellst Du in jedem Schleifendurchlauf ein neues (unnötiges) Array.
Unnötig, weil Du sowieso immer nur einen Platz davon beschreiben willst (tatsächlich aber schreibst Du ja wie erwähnt hinter das Array).Und ja, wenn Du nicht irgendwann zwei Filepointer zur gleichen Zeit benötigst, dann brauchst Du auch kein Array von Filepointern.
-
Jup, ich glaub darin lag der denk Fehler.
Danke für die Hilfe