Problem beim Öffnen/Schreiben einer Datei (C)

Hi Community,
dies ist mein erster Beitrag bzw meine erste Frage an euch:

Ich habe folgenden Code mithilfe von Microsoft Visual Studio geschrieben (bitte jetzt keine Diskussion darüber wie bescheiden das Programm ist :wink: )

// file_verarbeitung.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include „stdafx.h“
#include „string.h“
#include „stdio.h“
#include „stdlib.h“

//
char auswahl, filename[10], str[100];
FILE*fp;

void main()
{
do
{
printf(„neue Datei anlegen? j/n \n“);
fflush(stdin);
auswahl = getchar();
switch(auswahl)
{
case ‚j‘:
//Filename abfrage
fflush(stdin);
printf(„Dateiname?“);
fgets(filename, 10, stdin);
printf("%s", filename);
//File anlegens
fp = fopen(filename,„w+“);
//Filecontent
printf("Geben sie ein paar Worte ein : ");
fflush(stdin);
fgets(str, sizeof(str), stdin);
if(fwrite(&str, sizeof(str), 1, fp) != 1)
{
printf(„Oh, da ist wohl was schief gegangen…“);
}
//fclose(fp);
break;
}
} while(auswahl == ‚n‘);
system(„PAUSE“);
}

Im Großen und Ganzen soll bloß gefragt werden, ob eine Datei erstellt werden soll, wenn bejaht soll der Dateiname sowie der Inhalt abgefragt werden.

Wenn ich den Code nun aber ausführe, liefert mir der Debugger nach der Eingabe der „paar Worte“ folgende Fehlermeldung:
„Expression: (stream != NULL)“

ich verstehe einfach nicht welches Problem der Compiler hat… Hoffe ihr könnte mir helfen

Danke schon im Voraus.

Gruß
matze9881

Hallo

Ich habe das mal ein wenig zurecht gebogen. Den Code bitte in pre-Marken setzen, so wie hier, das ist besser leserlich:

// unnoetig fuer die Console:
// #include "stdafx.h"
// std-lib in :
#include 
#include 
#include 
#include // fuer getch()
#include // Fehler-Check mit assert()

char auswahl, filename[32], str[100];
FILE \*fp = 0;

void main()
{
 do
 {
 printf("neue Datei anlegen? j/n \n");
 // fflush(stdin); // unnoetig
 // besser mit getch():
 auswahl = getch();
 switch(auswahl)
 {
 case 'j':
 //Filename abfrage
 printf("Dateiname?\n");
 scanf ("%s", filename);

 //File anlegen
 fp = fopen(filename,"wt");
 assert (fp); // fehler-check
 //Filecontent
 printf("Geben sie ein paar Worte ein : ");

 // schleife noetig:
 do {
 scanf ("%s", str); // je ein Wort einlesen
 // fputs (str, fp); // in die Datei damit
 if ( fprintf(fp, "%s ", str) 1);

 // klar doch, schliessen ist OK:
 fclose(fp);
 break;
 }

 // war wohl so gemeint, mit != ?
 } while(auswahl != 'n');

 system("PAUSE");
}

Der Fehler mit „stream“ bezog sich wahrscheinlich auf den FILE-Zeiger. Bei mir tritt er nicht mehr auf.

lG
Martin B

Danke Martin!
Du hast mir echt geholfen.

habs jetzt folgendermaßen gelöst:

// file\_verarbeitung.cpp
// Autor: Matthias P.
// Bemerkung: Programm zum Schreiben einer Datei

#include 
#include 
#include 
#include // fuer getch()
#include // Fehler-Check mit assert()

//
char auswahl, filename[10], str[100];
FILE \*fp;


void main()
{
 do
 {
 printf("neue Datei anlegen? j/n \n");
 auswahl = getch();
 switch(auswahl)
 {
 case 'j':
 //Filename abfrage
 printf("Dateiname? \n");
 scanf ("%s", &filename);
 fflush(stdin);

 //File anlegen
 fp = fopen(filename,"wt");
 assert (fp); // fehler-check

 //Filecontent
 printf("Geben sie ein paar Worte ein : ");
 gets(str);
 fwrite(&str, sizeof(str), 1, fp);

 //File schließen
 fclose(fp);
 break;
 }
 } while(auswahl == 'n');
 system("PAUSE");
}

==‚n‘ soll so bleiben, mann soll keine Wahl haben ^^
Vielen Dank nochmal.

Gruß Matze9881

Hallo Matze

Ein Hinweis noch:

fwrite(&str, sizeof(str), 1, fp);

finde ich nicht so gut, vgl. hier:
http://cplusplus.com/reference/clibrary/cstdio/fwrite/

Wenn Dir die „fwrite()“ lieber ist, bitte, aber dann wäre es doch besser so:

fwrite(str, // ohne das &, "str" ist schon ein Zeiger
 sizeof(char), // Size in bytes of each element to be written.
 100, // Number of elements, each one with a size of size bytes.
 fp);

Zeiger und Arrays sind in C/C++ ja austauschbar. Mit dem ‚&‘ wäre das schon ein Doppelzeiger.

lG
Martin B