Forum: PC-Programmierung Fehler bei fputs in Linux


von Robert B. (rsb89)


Lesenswert?

Hallo zusammen,

ich bin kurz vor dem Verzweifeln! Ich möchte gerne einige Werte in eine 
Datei schreiben. Dafür habe ich folgenden Code:
1
results = fopen("aes_results.txt", "a");
2
if(results = NULL){
3
  printf("Fehler beim öffnen von aes_results.txt\n");
4
  break;
5
}
6
7
#if DEBUG
8
printf("aes_results.txt wurde geoeffnet!\n");
9
#endif
10
  
11
sprintf(put, "EncKey: %.3f", time1[0]);      
12
fputs(put, results);
13
print_results(results, time1);
14
...

An der Stelle fputs() bekomme ich unter Linux die Meldung "Segmentation 
fault". Soweit ich recherchiert habe hat das etwas mit 
Zugriffsberechtigung zu tun. Aber das hilft mir leider nicht beim Lösen 
des Problems. Ich hoffe mir kann hier jemand helfen.

Etwas früher erstelle ich die Datei:
1
results = fopen("aes_results.txt", "w+");
2
if(results != NULL){
3
  sprintf(put, "AES - Schluessel: \"%s\"\n", AES_KEYDATA);
4
  fputs(put, results);
5
  fclose(results);
6
#if DEBUG
7
  printf("aes_results.txt wurde erstellt!\n");
8
#endif
9
}else{
10
  printf("Fehler beim erstellen von aes_results.txt\n");
11
}
Das funktioniert auch Problemlos.

: Bearbeitet durch User
von Christian (Gast)


Lesenswert?

soweit ich weiss erwartet fputs einen pointer auf deinen string 
(char-array).

von Robert B. (rsb89)


Lesenswert?

Wird bei der Übergabe eines char-Arrays nicht grundsätzlich der Pointer 
übergeben oder so ähnlich? Bei fputs(&put, ...) bekomme ich jedenfalls 
einen fehler vom Compiler, davor hat er nichts gesagt.

von Christian (Gast)


Lesenswert?

ich glaube die antwort war unsinn... ;-)

von Christian (Gast)


Lesenswert?

Robert B. schrieb:
> Wird bei der Übergabe eines char-Arrays nicht grundsätzlich der
> Pointer
> übergeben oder so ähnlich? Bei fputs(&put, ...) bekomme ich jedenfalls
> einen fehler vom Compiler, davor hat er nichts gesagt.

ja genau die funktion legt ja quasi bei übergabe den pointer auf deinen 
string an. daher war meine antwort unsinn ;-)

von Christian B. (chbalnuweit)


Lesenswert?

Wie sieht denn dein String "puts" nach sprintf aus? Wo und Wie hast du 
den String puts definiert?

von Robert B. (rsb89)


Lesenswert?

Christian B. schrieb:
> Wie sieht denn dein String "puts" nach sprintf aus? Wo und Wie hast du
> den String puts definiert?

Ich habe put statisch mit 100 Zeichen (char put[100]) definiert.

von Tassilo H. (tassilo_h)


Lesenswert?

Da
if(results = NULL){
fehlt das zweite =
womit dann results immer NULL ist.

von Thomas M. (thomil)


Lesenswert?

Robert B. schrieb:
>
1
> results = fopen("aes_results.txt", "a");
2
> if(results = NULL){
3
> //         ^----- Hier sollte "==" stehen"

Du überschreibst deinen file pointer mit NULL, übergibst es dann an 
fputs(), und bekommst dann natürlich auch eine Segmentation Fault, wenn 
fputs() versucht diesen NULL pointer zu dereferenzieren.

von Robert B. (rsb89)


Lesenswert?

Tassilo H. schrieb:
> Da
> if(results = NULL){
> fehlt das zweite =
> womit dann results immer NULL ist.

Joa, da hast du wohl recht! Vielen Dank!!!

von Helmut L. (helmi1)


Lesenswert?

Und statt "sprintf  fputs" kann man auch direkt "fprintf" nehmen.

von Dirk B. (dirkb2)


Lesenswert?

Irgendwie sieht das so aus, als ob du die Funktionen falsch anwendest.

Statt der Kombination sprintf und fputs geht doch auch gleich fprintf.

Und für printf("Texct\n") ist puts("Text") gedacht. (Ok, dass optimiert 
auch der Compiler).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.