Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

C-Programm mit QC2 läuft nicht

Nobody666 / 3 Antworten / Flachansicht Nickles

Hallo, habe anbei  kleine Teile aus einem C-Progamm. Unter gcc compiliert und ausgeführt ohne Fehler, muß aber leider unter qc2 laufen, und da wirft es mir mehrere Fehlermeldungen aus:


1.)einlesen von Informationen aus einer Datei. In dieser Zeile soll ein Dateiname aus dieser Datei eingelesen werden, der dann in der Variabel Binaerfile gespeichert wird


char Binaerfile[60];


char bin[60];


..... if(fscanf(ep,"%s",&bin)==NULL)    //Fehlermeldung: '&' zu Funktion/Datenfeld ignoriert
  exit(0);
 Binaerfile=bin;          //Fehrlermeldung:'='   : Operand links muß L-Wert sein


2.) folgende Deklaration steht mitten im Code, nicht am Anfang, da Werte erst eingelesen werden müssen



ManufactureingInfoSize=Adresse_Chksum-BeginManufactureingInfoSize+4;
char Manufactureing_Info [ManufactureingInfoSize]; //Syntaxfehler: fehlendes ';' vor Typ char


3.) 1. Fehlermeldung ist klar, da aus obiger Fehlermeldung resuliert (Fehlermeldungen durch // getrennt.


Manufactureing_Info [i] = getc(werte); //Manufactureing_Info nicht definiert //Index auf Nicht Datenfeld angewandt  // '=':Operand Links muß L-Wert sein


Weiß nicht, was der Compiler mit L-Wert immer meint.


Schon mal Danke im vorraus

bei Antwort benachrichtigen
mr.escape Nobody666 „C-Programm mit QC2 läuft nicht“
Optionen
2.) folgende Deklaration steht mitten im Code, nicht am Anfang, da Werte erst eingelesen werden müssen

ManufactureingInfoSize=Adresse_Chksum-BeginManufactureingInfoSize+4;
char Manufactureing_Info [ManufactureingInfoSize]; //Syntaxfehler: fehlendes ';' vor Typ char

Geht so nicht muss dynamisch gemacht werden, d.h.:

char *Manufactureing_Info =(char *)malloc(ManufactureingInfoSize*sizeof(char));

(sizeof ist hier unnötig, aber stört nicht und man gewöhnt sich dran) allerdings muss später der speicherbereich selbst wieder freigegeben werden:

if(Manufactureing_Info) free(Manufactureing_Info);
Manufactureing_Info=NULL;

(alternativ in c++ mit:

char *Manufactureing_Info =new char[ManufactureingInfoSize];

und

if(Manufactureing_Info) delete[] Manufactureing_Info;
Manufactureing_Info=NULL;

Angaben zum fehlerfall (s.u.) sind die gleichen)


malloc() kann auch NULL zurückgeben, dann ist ein fehler geschehen. Also aufpassen und diesen zustand beachten (fehlermeldung etc.).
Eine speicherzuweisung mit z.b.:
char Manufactureing_Info [ManufactureingInfoSize];
geht auch nur mit konstantem ManufactureingInfoSize, da dieses zu kompilezeit geschieht.

Der dritte fehler kommt dann auch nicht (Manufactureing_Info war da nicht definiert und wird glaube ich als int angenommen. Eine nicht array variable kann aber nicht indiziert werden).

Der "L-Wert" ist eine bezeichnung für einen, als variable verwendbaren ausdruck. Also sowas wie variablenamen mit oder ohne index, funktionen, die eine referenz zurückgeben etc. aber nicht namen von statischen arrays oder sowas wie:
a+b=1;
da der linke teil ("a+b", also links vom gleichheitszeichen) nicht zum speichern geeignet ist (Manufactureing_Info [i] ist nicht definiert und damit nicht zum speichern geeignet, also kein L-Wert).

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen