Befehlsargumente in C

Hi Leute,

den folgenden Code kann ich zwar kompilieren, allerdings kommt beim ausführen des Codes die Datei "output.c" mit der Fehlermeldung "Unbehandelte Ausnahme bei 0x10227c2f (msvcr80d.dll) in Prämienjagd.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000070."

Könnt ihr mir vllt. sagen, woran das liegt?

Mein nächstes Problem ist, dass ich den Dateinamen eigentl. nicht begrenzen will (in meinem Fall jetzt auf 50 Zeichen). Habt ihr eine Ahnung, wie ich das mit Zeigern machen könnte? Dann wäre der Name der Datei ja endlos lange möglich, oder?

Liebe Grüße
Woosh

PS: Ich nutze Visual Studio 2005 Professional Edition

Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "myconio.h"


int main(int argc, char *argv[])
{
	char DateiName[50];
	FILE *ArtikelDatei;

	clrscr();

	//	Datei-Parameter vorhanden?
	if(argc != 2) {
		printf("Bitte rufen Sie das Programm zusammen mit einer Datei auf!\n");
		return(1);
	}
	else {
		strcpy(DateiName, *(argv+1));
	}


	//	Datei öffnen
	ArtikelDatei = fopen(DateiName, "r");

	//	Konnte Datei geöffnet werden?
	if(ArtikelDatei == NULL) {
		printf("Konnte Datei %s nicht öffnen!\n", *DateiName);
		return(1);
	}
	else {
		printf("Konnte Datei %s oeffnen!\n", *DateiName);
	}


	getch();
	return(0);
}
 
Fehler:
Code:
printf("Konnte Datei %s nicht öffnen!\n", *DateiName);
"Dateiname" ist schon ein Zeiger.
Mit *Dateiname gibst Du den ersten Buchstaben des Arrays als Adresse an. Daher auch der Fehler "Zugriffsverletzung beim Lesen an Position 0x00000070."
 
Original von CDW
Fehler:
Code:
printf("Konnte Datei %s nicht öffnen!\n", *DateiName);
"Dateiname" ist schon ein Zeiger.
Mit *Dateiname gibst Du den ersten Buchstaben des Arrays als Adresse an. Daher auch der Fehler "Zugriffsverletzung beim Lesen an Position 0x00000070."

Aber wenn DateiName schon ein Zeiger IST, würde das ja heißen, ich könnte DateiName statt mit "char DateiName[50];" auch mit "char *DateiName;" definieren. Wenn ich das mache, bekomme ich folgenden Runtime-Fehler:
Code:
Run-Time Check Failure #3 - The variable 'DateiName' is being used without being defined.

Was genau mache ich denn falsch? Sry, hab schon längere Zeit kein C mehr programmiert ;-)
 
Was genau mache ich denn falsch?
das sollte funktionieren:
Code:
printf("Konnte Datei %s nicht öffnen!\n", DateiName);
Aber wenn DateiName schon ein Zeiger IST, würde das ja heißen, ich könnte DateiName statt mit "char DateiName[50];" auch mit "char *DateiName;" definieren.
Habe mich vielleicht etwas unverständlich ausgedrückt: der Name eines Arrays steht gleichzeitig für die Adresse des Arrays.
 
Okay, also so klappt es jetzt. Allerdings will ich trotzdem, dass die Länge des Dateinamens variabel sein soll.
In folgendem Beispiel kann dieser ja nur bis zu 51 Zeichen lang sein:
Code:
char DateiName[50];

Wenn ich diese Reservierung Austausche durch folgende Zeile
Code:
char *DateiName;

erreiche ich ja eigentl. das selbe wie oben, nur dass der Inhalt eine variable Länge besitzt. Allerdings bekomme ich dann folgenden Runtime-Fehler:
Code:
Run-Time Check Failure #3 - The variable 'DateiName' is being used without being defined.

Dieser bezieht sich auf folgende Zeile:
Code:
strcpy(DateiName, *(argv+1));

Was mache ich da wieder falsch?

Liebe Grüße
Woosh
 
Mit

Code:
char *DateiName;

weiß der Compiler zwar, dass "DateiName" ein Zeiger auf ein Char-Array ist, jedoch nicht welche länge es hat. Deshalb musse du ihm erst noch Speicher zuweisen:


Code:
DateiName = malloc( laenge * sizeof(char) );

Lies dir am besten ein Tutorial über Zeiger in C durch.


mfg
 
omg, wie konnte ich das vergessen... nein, ich glaub ein tutorial brauchts nicht ;-) ich sollte mir nur die unterlagen vom letzten jahr nochmal durchlesen ;-)

vielen dank... ka, wieso ich das übersehen hab
 
Zurück
Oben