Programm erzeugt keine Datei

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Programm erzeugt keine Datei

Beitrag von Xin » Fr Mai 22, 2020 7:15 pm

pratio hat geschrieben:
Fr Mai 22, 2020 5:30 pm
Ich hätte noch eine kleinere weitere Frage, wenn es ok ist. Und zwar würde ich gerne den Namen der Datei auch über die Konsole eingeben können. Überlegt habe ich mir folgendes:

Code: Alles auswählen

int main(int argc, char** argv[])
{
	FILE* fp;
	char filename[] = argv[1];
	char mode[] = "w";
	fp = fopen(filename, mode);

	if (fp == NULL)
		printf("error creating file: %s\n", strerror(errno));
	else
		printf("file created successfully\n");

	fprintf(fp,"please write this: hallo");
	fclose(fp);
}
Die Übergabe an das filename funktioniert aber nicht und ich weiß nicht, wie ich das argv[1] an das filiname[] richtig übergebe
Gar nicht. argv[1] ist ein Pointer, filename ist ein Array, was sich zur Compilezeit(!) entscheiden muss, wie groß es ist. Das ist über die [] so definiert.
Nun weiß man aber nicht, wie lang der Text ist, auf den argv[1] zeigt.

Wenn Du später fopen() rufst, erwartet fopen einen Pointer als erstes Argument. Das Array übergibt also den Pointer auf das erste Element, also den ersten Buchstaben. Das ist das gleiche wie das, was in argv[1] steht. Also arbeite durchgehend mit Pointern:

Code: Alles auswählen

char * filename = argv[1]
Und die Codeflags kannst Du oben einschalten indem Du auf das </> Symbol drückst. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

jomaber
Beiträge: 10
Registriert: Do Nov 26, 2020 10:47 am

Re: Programm erzeugt keine Datei

Beitrag von jomaber » Di Dez 01, 2020 7:14 pm

/*
int main(int argc, char** argv)
oder
*/
int main(int argc, char* argv[])
{
/* statt int main(int argc,char** argv[]);

wenn es überhaupt noch von Interesse sein sollte
*/
}

Antworten