Expression: string != NULL

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 :wink:

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 :wink:

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

Wie sieht hex_line aus? Poste den Code :wink:

Den ganzen Programmcode? Oder das Hexfile aus dem ich die
Linie auslesen will? Der ganze Programmcode hat 1250 Zeilen!

Poste am besten nur:

  • Die vier ersten Zeilen aus dem Hexfile
  • Die C-Funktion, in der dieser Lese-Fehler ausgelöst wird.

Grüße

CMБ

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 :

  • statt char * hex_line schreibst Du gleich global

    char hex_line[GROSSGENUG];

Aber nicht beides :wink:

Grüße

CMБ

1 Like

Vielen Dank! Ich hoffe bald keine anfängerfehler mehr hier posten zu müssen!
Nochmals danke…