tmpfile
-
Hallo!
Ich soll ein Programm schreiben das ein tmpFile erstellt etwas draufschreibt.
Mein Programm sieht so aus:int query=0; FILE *fptmp; int fd; if ((fd = mkstemp(template)) < 0) { perror("file couldn't be created"); return 1; } if (fptmp=fdopen(fd, "w") == NULL) { perror("Can't open tmp-File for writing"); return 1; } fprintf(fptmp,"%i",query); fflush(fptmp); ......}
Das tmpFile wird erstellt und öffnen lässt es sich anscheinend auch, nur wenn ich dann was draufschreiben will mit fprintf(fptmp,"%i",query) bekomm ich nen Segmentation Error.
Kann mir bitte wer helfen?
MfG
Dosunmu
-
Also ich hab keine Probleme... Kann es sein, dass du da die Klammer in Zeile 18 vergessen hast? Oder dass dein tpl_str sich nicht beschreiben lässt?
#include <stdlib.h> #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { int query=0; FILE *fptmp; int fd; char tpl_str[250]; strcpy(tpl_str, "tempdatei_XXXXXX"); if ((fd = mkstemp(tpl_str)) < 0) { perror("file couldn't be created"); return 1; } if ((fptmp=fdopen(fd, "w")) == NULL) { perror("Can't open tmp-File for writing"); return 1; } fprintf(fptmp,"%i",query); fflush(fptmp); }
-
Oder dass dein tpl_str sich nicht beschreiben lässt?
Was meinst du damit bzw. wie kann ich das überprüfen?
-
dosunmu schrieb:
Oder dass dein tpl_str sich nicht beschreiben lässt?
Was meinst du damit bzw. wie kann ich das überprüfen?
Wenn dein Pointer in tpl_str auf einen nicht beschreibbaren bereich zeigt. z.b. mit:
const char* tpl_str = "tempdatei_XXXXXX"
btw. Bist du sicher, dass in deine template Variable am Ende seche "X" stehen?
-
const habe ich nicht verwendet und am Ende stehen bei mir sechs X.
-
dosunmu schrieb:
const habe ich nicht verwendet und am Ende stehen bei mir sechs X.
Das const ist unwichtig. Auch das hier geht nicht:
char* tpl_str = "tempdatei_XXXXXX"
Edit: Das liegt daran, dass tpl_str dann auf einen Addressbereich zeigt, der nicht verändert werden kann.
-
Ich habs so definiert:
char template[]="fileXXXXXX";
-
dosunmu schrieb:
Ich habs so definiert:
char template[]="fileXXXXXX";
Von der geschichte mit den fehlenden Klammer in Zeile 18 (bei dir Zeile 10) abgesehen, kann ich schonst keinen Fehler entdecken. Der müsste also wo anders liegen. Vielleicht ist der Datenträger voll.
-
Danke ProgChild!
Ich habe jetzt meinen code mit deinem verglichen und bin draufgekommen das ich zwei Klammern vergessen habe und darum alles nicht gefunzt hat!
if ([b]([/b]fptmp=fdopen(fd, "w")[b])[/b] == NULL)