c - fopen Problem

BadPhantom

Mitglied
VS .NET 2003
Shell Anwendung

Hallo zusammen,

ich möchte die Einstellungen eines DB-Programms in einer Datei speichern.
Dazu verwende ich folgende Funktion, die beim ausführen einen ZUgriffsfehler verursacht.
Ich hoffe, Ihr könnt mir helfen.

Code:
   int save_settings()
   {
   	char name[200];
   	char over;
   	CLS;
   	printf("Speichern\n==========\n");
   	printf("Unter welchem namen speichern :  ");
   	scanf("%s", &name);
   
   	if(fopen(name, "r")!=NULL)
   	{
   		CLS;
   		printf("\nDatei '%s' bereits vorhanden! Ueberschreiben? (j/n) ", name);
   		over=tolower(getchar());getchar();
   		if (over=='n')
   		{
   			CLS;
   			printf("\nSpeichervorgang abgebrochen!.. [RETURN]");
   			getchar();
   			return 0;
   		}
   		// CLS;
   		// printf("\nDaten nicht gespeichert! ..  [RETURN] ");
   		// getchar();
   		
   	}
   	fclose(fz);
   	
   	fopen(name,"w");
   	fwrite(server, sizeof(char), strlen(server), fz);
   	fwrite(user, sizeof(char), strlen(user), fz);
   	fwrite(pass, sizeof(char), strlen(pass), fz);
   	fwrite(db, sizeof(char), strlen(db), fz);
   	fclose(fz);
   	
   	return 1;
   }

Danke schonmal
 
moin


Wo genau tritt den der Zugriffsfehler auf?
Hast du es schonmal Debugt(wird das so geschrieben)?

Außerdem lass mal bai:
Code:
scanf("%s", &name);
das & weg, da es sich bei der Zielvariable um ein Array handelt ist das nicht nötig. Ob es daran liegt weiss ich aber nicht.


mfg
umbrasaxum
 
Danke für die antwort.

Also am '&' in scanf sollte es nicht liegen, das hat bei mir immer schon funktioniert.

Ich habe es jetzt mal nach Deinem Vorschlag versucht, es funktioniert aber trotzdem nicht.

Der Fehler müsste irgendwo beim FILE *fz Zeiger liegen.
Nachdem ich den fz auf fopen(...) gesetzt habe, bekomme ich jetzt keine Fehlermeldung mehr, wenn ich in eine bereits vorhanden Datei schreiben will. Ein neuer Dateiname ruft aber den gleichen Fehler hervor.
Auslesen kann ich dann aber auch nichts (aber ohne Fehlermeldung).Vielleicht ist aber auch noch ein Fehler in der load function.

Hier mein jetziger Code:
Code:
  int save_settings()
  {
  	char name[200];
  	char over;
  	CLS;
  	textcolor(green);
  	printf("Speichern\n");
  	textcolor(white);
  	printf("==========\n");	
  	printf("Unter welchem namen speichern :  ");
  	scanf("%s", &name);
  
  	if((fz=fopen(name, "r"))!=NULL)
  	{
  		CLS;
  		printf("\nDatei '%s' bereits vorhanden! Ueberschreiben? (j/n) ", name);
  		over=tolower(getchar());getchar();
  		if (over=='n')
  		{
  			CLS;
  			textcolor(red);
  			printf("\nSpeichervorgang abgebrochen!.. [RETURN]");
  			textcolor(white);
  			getchar();
  			return 0;
  		}
  		CLS;
  		printf("\nDaten nicht gespeichert! ..  [RETURN] ");
  			getchar();
  		
  	}
  	fclose(fz);
  	
  	fz=fopen(name,"w");
  	fwrite(server, sizeof(char), strlen(server), fz);
  	fwrite(user, sizeof(char), strlen(user), fz);
  	fwrite(pass, sizeof(char), strlen(pass), fz);
  	fwrite(db, sizeof(char), strlen(db), fz);
  	fclose(fz);
  	
  	return 1;
  }

P.S.: Wenn der Debug-Modus noch andere Vorteile hat, als mir anzuzeigen das etwas nicht stimmt, wäre ich dankbar wenn mir diesen jemand mitteilt. :-)
 
Debug Modus hin oder her, meistens reicht es wenn du dir nochma genau überlegst was du eigentlich tust - vor allem in dem Fall wenn die Datei noch nicht existiert:

Code:
fz = fopen( name, "r"); /* => Fehler, Datei existiert nicht!   fz wird auf NULL gesetzt */

fclose( fz ); /* Versuch eine Datei zu schließen die nicht offen ist, wobei fz auf NULL zeigt ==> Speicherzugriffsfehler. */

Is wohl besser wenn du so verfährst:

Code:
if ((fz = fopen( name, "r")) != NULL) {
 /* blah */
fclose( fz );
}
 
Zuletzt bearbeitet:
Zurück