Ich habe Probleme mit dem Verständnis, wenn ich den Zeiger übergeben sollte und wenn das Ding darauf zeigt. in meinem Code:C - Öffnen einer Datei und Lesen von Char von Char mit Übergabe des Dateizeigers als Argument
int checkFile(FILE fp)
{
int c;
while((c = fgetc(*fp)) != EOF)
{
putchar(c);
}
fclose(*fp);
}
int main(int argc, char *argv[])
{
FILE *fp = fopen(argv[0], "r");
char fileName = argv[1];
if(argc > 2)
{
printf("Please supply a file!\n");
printf("usage: CheckParenthesis <file name>\n");
}
if (fp == NULL)
{
printf("Error! trying to open the file\n");
return 1;
}
else
{
checkFile(fp);
}
return 0;
}
ich große Fehler kompilieren dies zu umgehen, ist der Fehler:
C:\Users\Dell\ClionProjects\CheckParenthesis\CheckParenthesis.c: In function 'checkFile':
C:\Users\Dell\ClionProjects\CheckParenthesis\CheckParenthesis.c:17:22: error: invalid type argument of unary '*' (have 'FILE')
while((c = fgetc(*fp)) != EOF)
^
C:\Users\Dell\ClionProjects\CheckParenthesis\CheckParenthesis.c:21:12: error: invalid type argument of unary '*' (have 'FILE')
fclose(*fp);
^
C:\Users\Dell\ClionProjects\CheckParenthesis\CheckParenthesis.c: In function 'main':
C:\Users\Dell\ClionProjects\CheckParenthesis\CheckParenthesis.c:28:21: warning: initialization makes integer from pointer without a cast
char fileName = argv[1];
^
C:\Users\Dell\ClionProjects\CheckParenthesis\CheckParenthesis.c:41:9: error: incompatible type for argument 1 of 'checkFile'
checkFile(fp);
^
C:\Users\Dell\ClionProjects\CheckParenthesis\CheckParenthesis.c:12:5: note: expected 'FILE' but argument is of type 'struct FILE *'
int checkfile (FILE fp)
Ich weiß, es gibt hier mehrere Problematiken, aber ich weiß nicht wissen, was richtig ist: 1. öffne ich das richtige Argument? beide argv [0] und argv [1] scheint der Dateipfad zu sein i .. Addiert man diese als Druck angegeben aus i für das Erhalten der argv Informationen gemacht: Test:
printf("There are %d args, %s, %s\n", argc,argv[0],argv[1]);
Ergebnis:
There are 2 args, C:\Users\Dell\.CLion2016.2\system\cmake\generated\CheckParenthesis- 5dc89373\5dc89373\Release\CheckPare
nthesis.exe, C:\testing\brackets.txt
- mache ich die richtige Zeigerverwendung?
Sie müssen den Dateizeiger nicht dereferenzieren, wenn Sie als Argument übergeben – dvhh
Und das Argument sollte übergeben werden als 'FILE *', nicht 'FILE'. Der Aufruf von 'main' ist property, aber die Funktion decl nicht. Es sollte 'int checkFile (FILE * fp)' – WhozCraig
und 'char fileName = argv [1];' ist falsch, sollte es 'char * fileName = argv [1] sein;' – dvhh