sblaesing
Goto Top

C Programmierung, Probleme mit Datei öffnen

Hallo,

ich habe ein Problem, ich habe die Funktion Datei():
int Datei()
{
	char POCDatenZeile[256];
 	char FMSDatenZeile[256];
	char line[2560];
	unsigned result;

 FILE *fd;
   char *datei = "testdatei.txt";  
   int nRet;
   size_t *t = malloc(0);

   char **gptr = malloc(sizeof(char*));
   *gptr = NULL;

   if ( (fd = fopen(datei,"r+")) == NULL) {  
      fprintf(stderr, "\nKonnte Datei %s nicht öffnen!", datei);  
      return 0;
   }

// Datei Zeilenweise auslesen:
  while( (nRet=getline(gptr, t, fd)) > 0)
	{
	
		// Abfrage DatenSatzart, momentan FMS und POC     
		if(strstr(*gptr, "FMSTlg"))  
			{
				printf("\nFMS upload!");	  
				strcpy(FMSDatenZeile, *gptr);	
				//result = replace_character(FMSDatenZeile, '\t', '_'); 
				//printf("\nFMS ----%s----", FMSDatenZeile); 
				upload(FMSDatenZeile);
			} 
		else if (strstr(*gptr, "POC"))  
			{

			//-------------POCSAG auswerten------------------------

// Rohdaten-Upload

				printf("\nPOC upload!");	  
				strcpy(POCDatenZeile, *gptr);	
				//result = replace_character(POCDatenZeile, '\t', '_'); 
				//result = replace_character(POCDatenZeile, ' ', '-'); 
				//printf("\nPOC ----%s----", POCDatenZeile); 
				upload(POCDatenZeile);


			} // Ende der Abfrage auf POC - else if
		

		//-------------ENDE: POCSAG auswerten------------------------

		else // Falls nicht POC oder FMS
			{
				//printf("\n\n Nicht erkannter DatenSatz in Alarm-Datei"); 
			}
		
	}  // Ende der Schleife über das Zeilenweise Auslesen
fclose(fd);
return 1;

}
Das funktioniert auch alles wunderbar.
Ich muss allerdings nochmals eine Datei öffnen in der Funktion ReadConfig:

int ReadConfig()
{

 FILE* f;
  char line[256];

  f = fopen("config.txt", "r");  
  while(fgets(line, 256, f))
  {
    // do sth
  }
  fclose(f);
  return 1;

}
Das Programm stürzt ab sobald ich die Finktion aufrufe. Habe viel und lange probiert, es ändert sich aber nichts.

Habt ihr eine Idee?

Danke!

Content-Key: 193830

Url: https://administrator.de/contentid/193830

Printed on: April 19, 2024 at 08:04 o'clock

Member: Alchimedes
Alchimedes Nov 06, 2012 at 20:05:57 (UTC)
Goto Top
Hallo,

Auf was fuer einen Betriebssystem entwickelst Du?

Was sagt der Compiler ?

Was nutzt Du? wenn gcc dann mit der Option -Wall , ansonsten haben die ide's in der Regel einen
Debugger dabei.

09 {

10. // do sth

11.}

und ne while schleife ohne Kommando....nur mit Kommentar?

Gruss
Member: Biber
Biber Nov 06, 2012 at 20:38:14 (UTC)
Goto Top
Moin sblaesing,

ändert sich das Programmverhalten, wenn du die Zeile 4 im zweiten Schnipsel änderst?

Streiche: FILE* f;

Setze: FILE *f;

Grüße
Biber
Member: rubberman
rubberman Nov 06, 2012, updated at Nov 07, 2012 at 01:40:59 (UTC)
Goto Top
Hallo sblaesing,

etwas Fehlerbehandlung vielleicht?
  f = fopen("config.txt", "r");  
  if (f==NULL)
  {
    puts("Mist");  
    return 1;
  }
Wie sieht denn dein
// do sth
in der Realität aus?

Grüße
rubberman
Member: sblaesing
sblaesing Nov 07, 2012 at 08:01:07 (UTC)
Goto Top
Hallo,

vielen Dank für die vielen Antworten.
Ich entwickle mit Pelles C unter und für Windows.

Der Compiler sagt nur:
main.c(48): warning #2018: Undeclared function 'ReadConfig'; assuming 'extern' returning 'int'.
warning #2117: Old-style function definition for 'Datei'.
warning #2018: Undeclared function 'getline'; assuming 'extern' returning 'int'.
warning #2114: Local 'result' is not referenced.


: warning #2114: Local 'line' is not referenced.

Die Schleife mit "//do sth" habe ich aus dem Internet mal zum Testen rein kopiert - funktioniert damit aber auch nicht.

Der Fehler (Programmabsturz) tritt auf, wenn ich das hier ausführe: Zeile 22: while( (nRet=getline(gptr, t, fd)) > 0).

Die Ironie an der Sache, in einem anderen Programm, das im Prinzip dasselbe macht, läuft es einwandfrei durch.
Member: sblaesing
sblaesing Nov 07, 2012 at 08:52:06 (UTC)
Goto Top
Zitat von @Biber:
Moin sblaesing,

ändert sich das Programmverhalten, wenn du die Zeile 4 im zweiten Schnipsel änderst?

Streiche: FILE* f;

Setze: FILE *f;

Grüße
Biber

nein, leider der selbe Effekt...
Member: sblaesing
sblaesing Nov 07, 2012 at 09:58:11 (UTC)
Goto Top
Hallo,

nochmals vielen Dank für die Antworten. Ich vermute das "getline" war das Problem, oder ich habe mich mit irgendwelchen Pointern "verzettelt".
Ich habe das ganze jetzt auf "fgets()" umgestellt. Funktioniert einwandfrei!

int Datei()
{
	char POCDatenZeile[256];
	char FMSDatenZeile[256];  
	char puffer[ZEILENLAENGE];
	char DateiName[20];

	FILE *quelle;

	strcpy(DateiName,"testdatei.txt");  

	if( (quelle=fopen(DateiName,"r")) == NULL)   
		{
			fprintf(stderr, "Kann %s nicht oeffnen\n", DateiName);  
			return 0;
		}
	
	while(fgets(puffer, ZEILENLAENGE, quelle))
	{
		if(strstr(puffer, "FMSTlg"))  
		{
			printf("\nFMS upload!");	  
			strcpy(FMSDatenZeile, puffer);	
			replace_character(FMSDatenZeile, '\t', '_');  
			//printf("\nFMS ----%s----", FMSDatenZeile);  
			upload(FMSDatenZeile);
		}
		else if(strstr(puffer, "POC"))  
		{
			printf("\nPOC upload!");	  
			strcpy(POCDatenZeile, puffer);	
			replace_character(POCDatenZeile, '\t', '_');  
			replace_character(POCDatenZeile, ' ', '-');  
			//printf("\nPOC ----%s----", POCDatenZeile);  
			upload(POCDatenZeile);
		}
	}
return 1;
}

Byebye,
Sebastian