Hilfe: C-Programm mit unerklärlichem Syntaxfehler

Issy

Mitglied
Hallo!

Ich versuche im Visual Studio ein C-Programm zu schreiben.

Aber ich bekommen nicht nachvollziehbare Fehler

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


main ()
{
	int n = 100, i = 1;
	fpos_t p;
	char c;
	char *word = (char *) malloc(n);
	
	FILE *duden, *text;

	duden = fopen("duden.txt", "r");

	fgetpos(duden, &p);

	c = fgetc(duden);
	while (c != EOF)
	{
		if (c == '\n')
		{
			i++;
			c = fgetc(duden);
		}
		else
			c = fgetc(duden);			
	}
	
	fsetpos(duden, &p);

	printf("Woerter in der Referenzdatei: %u\n", i);

	char *words[i]; 

    *fgets(word, n, duden);
	//words[0] = malloc(strlen(word));
	//strcpy(words[0], word);

	printf("Das Wort lautet: %s\n", word);
	//printf ("Das neue Wort lautet: %s\n", words[0]);

    printf ("Das Wort ist %u Zeichen lang.\n", strlen(word));

	fclose(duden);
	return 0;
}

Für die rote Zeile bekomme ich folgenden Fehler: "Syntaxfehler: Es fehlt ';' vor 'eingeben'". Da kann auch "int x;" stehen und der Fehler kommt.

Ich versteh das nicht.

Kann mir jemand weiterhelfen?

Danke, cu Issy
 
Zuletzt bearbeitet:
Die rote Zeile kann nicht funktionieren, weil das i eine Variable ist. Wie soll der Compiler wissen, wieviel Speicher er für dein Array reservieren soll, wenn du als Größenangabe eine Variable einsetzt? Du musst deinen Speicher schon selber reservieren. Wie das geht, weißt du ja, wie man in deinem Programm sieht.

Ich habe den Fehler korrigiert und das Programm bei mir in VC++ 6 reinkopiert. Dann lässt es sich kompilieren. Auch, wenn ich "int x;" reinschreibe. Woran deine Fehlermeldung liegt, weiß ich leider nicht.

Gawayn
 
Zuletzt bearbeitet:
Für die rote Zeile bekomme ich folgenden Fehler: "Syntaxfehler: Es fehlt ';' vor 'eingeben'". Da kann auch "int x;" stehen und der Fehler kommt.
Wo steht "Eingeben"? Ist der gepostete Code unvollständig? Häng doch am besten die Datei an deinen Post dran.
 
So, ich bin jetzt langsam am verzweifeln.

Im Anhang ist mein C-Datei. Weiß nicht, was ich falsch gemacht habe. Habe nun einen Wert für die Variable eingesetzt und in der Zeile drunter "int x;" eingefügt (nur zum Test).

Beide Zeilen haben den Fehler: "error C2143: Syntaxfehler: Es fehlt ';' vor 'eingeben'".

Ich versteh die Fehlermeldung nicht. Ist mir auch unerklärlich.
Hab ich was falsch gemacht, sla ich das Projekt erstellt habe?
Habe ein leeres C++-Projekt in MS Visual Studio .Net 2003 erstellt und eine "main.c" Datei erstellt (siehe Anhang).

Würde mich freuen, wenn mir doch noch jemand helfen kann. :)

Und noch was:
Kann ich mit "malloc" oder "calloc" irgendwie ein solch dynamisches Array erstellen, wenn ich keine Variable i für "char *words[i];" eingeben darf?

Vielen Dank für jede Hilfe.

MfG Issy
 

Anhänge

  • main.zip
    603 Bytes · Aufrufe: 26
Ich habe deine main.c kompiliert, und mit VC++ 6 tritt das gleiche Problem auf:
main.c(37) : error C2143: syntax error : missing ';' before 'type'
Ich kann es mir auch nicht erklären. Vermutlich ein Bug im Compiler. Umstellen des Codes hilft anscheinend: Ich habe die Zeilen mit words und x mal an den Anfang der Funktion gesetzt -- das geht.

Um ein Feld variabler Grösse zu erzeugen, musst du Platz mit malloc() und free() (oder bei C++ mit new und delete) allozieren.
 
Kachelator hat gesagt.:
[BUm ein Feld variabler Grösse zu erzeugen, musst du Platz mit malloc() und free() (oder bei C++ mit new und delete) allozieren.

Soll heißen ;):

Code:
char *words = new char[i];
...//was mit words machen
delete [] words;
 
Ay Ay *salutier* ;)
Ich wette aber, new würde bei ihm auch funktionieren :rolleyes: . Ok, malloc:

Code:
char *words = (char*)malloc(sizeof(char)*i);
...
free(words);
 
Okay, das konnte ich soweit umsetzen. Nun hab ich nur noch ein Problem:

Das Array soll 2-Dimensional sein, so dass ich folgende Anweisung habe, welche eine variable Länge für die 2. Dimension reserviert:
Code:
words[x] = malloc(strlen(word)+1);
Leider hab ich es nicht hinbekommen, auf "word[x]" zuzugreifen, denn ich:
Code:
char *words = (char*)malloc(sizeof(char)*i);
benutze.

Kann das sein? Was kann ich machen?
THX for help. ;)
 
Zurück