Hallo Experten
Ich bin wie ihr vielleicht schon wisst C anfänger. Nun habe ich ein Programm geschrieben das eine Datei Linie für Linie auslesen sollte. Ich bekomme keine Fehler beim Compilieren, beim ausführen jedoch folgenden:
File: fgets.c
Line: 59
Expression: string != NULL
und zeigt mir auf folgende Codezeile:
fgets(hex_line, MAX_HEX_LINE_LEN, hex_file.handle);
Das hex_file ist geöffnet! MAX_HEX_LINE_LEN ist definiert auf 45 und hex_line ist als char initialisiert!
Wiso bekomm ich diesen Fehler? Bitte helft mir weiter… Falls ihr mehr infos braucht fragt danach!
Gruss und schonmal danke
Markus
Hi,
File: fgets.c
Line: 59
Expression: string != NULL
eine „Assertion“. hex_line darf nicht NULL sein.
und zeigt mir auf folgende Codezeile:
fgets(hex_line, MAX_HEX_LINE_LEN, hex_file.handle);
Das hex_file ist geöffnet! MAX_HEX_LINE_LEN ist definiert auf
45 und hex_line ist als char initialisiert!
Wie sieht hex_line aus? Poste den Code 
CMБ
Hallo
File: fgets.c
Line: 59
Expression: string != NULL
eine „Assertion“. hex_line darf nicht NULL sein.
und zeigt mir auf folgende Codezeile:
fgets(hex_line, MAX_HEX_LINE_LEN, hex_file.handle);
Das hex_file ist geöffnet! MAX_HEX_LINE_LEN ist definiert auf
45 und hex_line ist als char initialisiert!
Wie sieht hex_line aus? Poste den Code 
Den ganzen Programmcode? Oder das Hexfile aus dem ich die Linie auslesen will? Der ganze Programmcode hat 1250 Zeilen! Das Hexfile noch mehr… Sorry wahrscheinlich wäre einem anderen alles klar was du willst aber mir nicht!
Danke schonmal
Gruss Markus
Hallo
Poste am besten nur:
- Die vier ersten Zeilen aus dem Hexfile
- Die C-Funktion, in der dieser Lese-Fehler ausgelöst wird.
Hexfile:
020000040000FA
10000000300E320C30873C0ED3001E031E010088D8
10001000320E105017103087380E03560310025856
10002000D3001E031E010089428CB0520080BF1015
Funktion:
void read_hex_data(void)
{
char * check_ptr;
char * data_buffer;
char check_word;
//-------------------------------------------------------------------------------------------------
//–Einlesen der Daten ----------------------------------------------------------------------------
check_word = fseek(hex_file.handle, 0, SEEK_SET);
if (check_word != 0)
{
sprintf(message, „Fehler beim Zugriff auf die HEX-Datei: %s“,
hex_file.name);
error(message);
}// if
check_ptr = fgets(hex_line, MAX_HEX_LINE_LEN, hex_file.handle);
trim(hex_line);
read_rectyp();
}
Hoffe das hilft! Die meisten Variablen sind global definiert… brauchst du diese Angaben?
Danke und Gruss Markus
Hallo
void read_hex_data(void)
{
char * check_ptr;
char * data_buffer;
char check_word;
//-----------------------------------------------------
//–Einlesen der Daten
check_word = fseek(hex_file.handle, 0, SEEK_SET);
if (check_word != 0)
{
sprintf(message, „Fehler beim Zugriff auf die HEX-Datei:%s“,
hex_file.name);
error(message);
bau hier mal folgende Zeilen ein:
sprintf(message, "%x", hex\_line);
error(message);
Und schreib mal, was da steht.
An welcher Stelle wird hex_line global definiert,
wie sieht das genau aus?
Grüße
CMБ
Hallo
bau hier mal folgende Zeilen ein:
sprintf(message,
„%x“, hex_line);
error(message);
Und schreib mal, was da steht.
Da steht „0“!
An welcher Stelle wird hex_line global definiert,
wie sieht das genau aus?
hex_line wird am Anfang vor dem main und vor den Funktionen, nach den strukturen definiert und zwar als pointer:
char * hex_line;
Grüße
Markus
Hallo
bau hier mal folgende Zeilen ein:
sprintf(message,
„%x“, hex_line);
error(message);
Und schreib mal, was da steht.
Da steht „0“!
Siehst Du. NULL bedeutet bei einem Zeiger: „leer“.
Wenn Du also in einen Speicherbereich schreibst, der
„0“ heisst, wird sich spätestens das Betriebssystem
beschweren.
An welcher Stelle wird hex_line global definiert,
wie sieht das genau aus?
hex_line wird am Anfang vor dem main und vor den Funktionen,
nach den strukturen definiert und zwar als pointer:
char * hex_line;
Das reicht nicht.
„char * hex_line“ erzeugt eine Variable mit dem
Namen hex_line, in der die Adresse des zugeordneten
Speichers drinsteht. Da C/C++ alle globalen Variablen
mit Null initialisiert, steht demnach auch Null drin.
Du musst entweder :
-
in Deiner Funktion absichern, dass dieser Variablen
ein Speicherbereich zugeordnet wird, also in Deiner
Funktion vor der Verwendung in fgets einmal:
if(hex_file == 0) {
hex_file = new char [GROSSGENUG];
}
oder :
Aber nicht beides 
Grüße
CMБ
1 „Gefällt mir“
Vielen Dank! Ich hoffe bald keine anfängerfehler mehr hier posten zu müssen!
Nochmals danke…