findet hier jemand bei long einen Fehler?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *quelldatei;
int c;
char datei[60];
switch(argc)
{
case 2:
printf("1 Argument angegeben
");
if((quelldatei=fopen(argv<font size="1">,"r")) == NULL){
printf("Konnte %s nicht oeffnen
",quelldatei);
} // if
else {
printf("Datei %s wurde geoeffnet
",quelldatei);
getchar();
} // else
fseek(quelldatei, 0L, SEEK_END);
long filepos = ftell(quelldatei);
while (filepos >= 0) {
fseek(quelldatei, filepos, SEEK_SET);
putc(getc(quelldatei), stdout);
filepos -= 1;
} // while
getchar();
break;
case 3:
printf("2 Argumente angegeben
");
printf("Das sind die 2 Argumente:%s %s
",argv<font size="1">,argv<font size="2">);
getchar();
break;
default: printf("Fehler!!! Kein Argument angegeben
");
getchar();
break;
}
}
kleiner Fehler
Re: kleiner Fehler
Hi bap.
long filepos = ftell(quelldatei);
So macht man das aber nicht.
Vor den ausführbaren Anweisungen zuerst definieren.
long filepos;
Dann im ausführbaren Teil
filepos = ftell(quelldatei);
Gruss
Sulu
long filepos = ftell(quelldatei);
So macht man das aber nicht.
Vor den ausführbaren Anweisungen zuerst definieren.
long filepos;
Dann im ausführbaren Teil
filepos = ftell(quelldatei);
Gruss
Sulu
Re: kleiner Fehler
Sach mal.
Funktioniert das wirklich:
if((quelldatei=fopen(argv,"r")) == NULL){
printf("Konnte %s nicht oeffnen ",quelldatei);
} // if
Müsste meines Erachtens
if((quelldatei=fopen(argv<font size="2">,"r")) == NULL){
printf("Konnte %s nicht oeffnen",argv<font size="2">);
} // if
lauten.
1.) argv ist eine String-Array un die Argumente müssen mit einem Index angesprochen werden.
argv[0] ... Programmname
argv<font size="1"> ... Erstes Argument
....
2.) quelldatei ist ein FIlE-Pointer. Den gibt mans normalerweise nicht aus allenfalls als
printf("quelldatei %p
",quelldatei);
Funktioniert das wirklich:
if((quelldatei=fopen(argv,"r")) == NULL){
printf("Konnte %s nicht oeffnen ",quelldatei);
} // if
Müsste meines Erachtens
if((quelldatei=fopen(argv<font size="2">,"r")) == NULL){
printf("Konnte %s nicht oeffnen",argv<font size="2">);
} // if
lauten.
1.) argv ist eine String-Array un die Argumente müssen mit einem Index angesprochen werden.
argv[0] ... Programmname
argv<font size="1"> ... Erstes Argument
....
2.) quelldatei ist ein FIlE-Pointer. Den gibt mans normalerweise nicht aus allenfalls als
printf("quelldatei %p
",quelldatei);
Re: kleiner Fehler
ne geht auch nicht
hat das vieleicht was mit dem Wert von argv und argc zu tun?
hat das vieleicht was mit dem Wert von argv und argc zu tun?
Re: kleiner Fehler
Kleiner Tipp am Rande: Das Board verschluckt eckige Klammern manchmal, da man mittels dieser und HTML-ähnlicher Codes seine Postings mit <b>Fett</b>-Schrift ([<!--no-->b<!--no-->]Fett[<!--no-->/b<!--no-->]) oder <i>kursiver</i> ([<!--no-->i<!--no-->]kursiver[<!--no-->/i<!--no-->]) Schrift schmücken kann. Auch <pre>prä-formatierter Text([<!--no-->pre<!--no-->]prä-formatierter Text[<!--no-->/pre<!--no-->])</pre> ist möglich und so Sachen, genauer nachzulesen unter <a href="http://www.pl-forum.de/cgi-bin/UltraBoa ... 0&Session=" target="_blank"><!--auto-->http://www.pl-forum.de/cgi-bin/UltraBoa ... <!--auto-->
Daher bitte beachten: Eckige Klammern in programm-Sourcen mittels "\<!--no-->" escapen, einzelne Backslashes (\<!--no-->) durch "\<!--no-->\<!--no-->" ersetzen!
(So, und jetzt aber erst mal die Vorschau nutzen. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">)
Jochen
Daher bitte beachten: Eckige Klammern in programm-Sourcen mittels "\<!--no-->" escapen, einzelne Backslashes (\<!--no-->) durch "\<!--no-->\<!--no-->" ersetzen!
(So, und jetzt aber erst mal die Vorschau nutzen. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">)
Jochen
Re: kleiner Fehler
Hi bap !
Also.
Folgender Programmaufruf:
hansi otto eva 1 3
bedeutet ein argc = 5.
Aber die Argumente sind so aufgebaut:
argv[<!--no-->0<!--no-->] ist "hansi"
argv[<!--no-->1<!--no-->] ist "otto" 1.) Argument
argv[<!--no-->2<!--no-->] ist "eva" 2.) Argument
argv[<!--no-->3<!--no-->] ist "1" 3.) Argument
argv[<!--no-->4<!--no-->] ist "3" 4.) Argument
! Das letzte Argument hat also die Nummer 4.
/* Alle Arguemtente ausgeben. */
for(i=0;i<argc;i++) {
printf("%s\<!--no-->n",argv[<!--no-->i<!--no-->]);
}
....................
Wir interesieren uns z.B. für das 2. Agument, das soll also ein Filename sein
/* Definition Filename */
char filename[256];
/* Jetzt wollen wir den Filename aus dem Commandlineargument entnehmen. */
strcpy(filename,argv[<!--no-->2<!--no-->]);
/* File öffnen */
if( fopen("filename","r")) == NULL) {
printf("So'n Pech aber auch! File %s konte nicht geöffnet werden\<!--no-->n",filename);
exit(1);
}
Bau mal dein Program sinngemäss um, dann sind wir schon mal weiter.
Gruss
SULU
PS: Die Backslash's bei den eckigen Klammern wieder wegnehmen wenn DU den Code aus dem Posting entnehmen solltest.
Also.
Folgender Programmaufruf:
hansi otto eva 1 3
bedeutet ein argc = 5.
Aber die Argumente sind so aufgebaut:
argv[<!--no-->0<!--no-->] ist "hansi"
argv[<!--no-->1<!--no-->] ist "otto" 1.) Argument
argv[<!--no-->2<!--no-->] ist "eva" 2.) Argument
argv[<!--no-->3<!--no-->] ist "1" 3.) Argument
argv[<!--no-->4<!--no-->] ist "3" 4.) Argument
! Das letzte Argument hat also die Nummer 4.
/* Alle Arguemtente ausgeben. */
for(i=0;i<argc;i++) {
printf("%s\<!--no-->n",argv[<!--no-->i<!--no-->]);
}
....................
Wir interesieren uns z.B. für das 2. Agument, das soll also ein Filename sein
/* Definition Filename */
char filename[256];
/* Jetzt wollen wir den Filename aus dem Commandlineargument entnehmen. */
strcpy(filename,argv[<!--no-->2<!--no-->]);
/* File öffnen */
if( fopen("filename","r")) == NULL) {
printf("So'n Pech aber auch! File %s konte nicht geöffnet werden\<!--no-->n",filename);
exit(1);
}
Bau mal dein Program sinngemäss um, dann sind wir schon mal weiter.
Gruss
SULU
PS: Die Backslash's bei den eckigen Klammern wieder wegnehmen wenn DU den Code aus dem Posting entnehmen solltest.
Re: kleiner Fehler
@Sulu
Dein File öffnen entspricht eigentlich ziemlich genau dem File öffnen von bap.
@bap
Ich fänbde es nicht schlecht, wenn du etwas genauer wärst. Die Aussage, findet hier jemand bei long einen Fehler,ohne anzugeben warum da z. B. ein Fehler sein soll, ist IMHO unter aller ...
Dazu gehört: Meckert der Compiler? Wenn ja welche Fehlermeldung gibt er aus. Gibt es Probleme bei der Ausführung deines Programms, wenn ja wie sieht die Fehlermeldung aus, und welche Parameter wurden übergeben.
Wenn du schon argv verwendest, wäre es auch nicht schlecht mit anzugeben, welches Argument du denn auswerten willst.
Dein File öffnen entspricht eigentlich ziemlich genau dem File öffnen von bap.
@bap
Ich fänbde es nicht schlecht, wenn du etwas genauer wärst. Die Aussage, findet hier jemand bei long einen Fehler,ohne anzugeben warum da z. B. ein Fehler sein soll, ist IMHO unter aller ...
Dazu gehört: Meckert der Compiler? Wenn ja welche Fehlermeldung gibt er aus. Gibt es Probleme bei der Ausführung deines Programms, wenn ja wie sieht die Fehlermeldung aus, und welche Parameter wurden übergeben.
Wenn du schon argv verwendest, wäre es auch nicht schlecht mit anzugeben, welches Argument du denn auswerten willst.
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)
Re: kleiner Fehler
@bap:
von dieser aussage lernen wir nichts. danke.
von dieser aussage lernen wir nichts. danke.