2012-03-29 9 views
1

Ich habe diese Hausaufgaben in C. Ich bin Anfänger, also ist es wahrscheinlich sehr einfach, aber trotzdem habe ich ein Problem damit."Zeiger von Integer ohne Besetzung" Warnung beim Öffnen der Datei.

int main(int argc, char* argv){ 

    int fd=open(argv[1], O_RDONLY); 
    int fileLength=(int)lseek(fd,0,SEEK_END); 
    lseek(fd,0,SEEK_SET); 
    char buf[fileLength]; 
    read(fd,buf,fileLength); 
    int i=0; 
    for(i=0; i<fileLength; i++){ 
     printf("%c",buf[i]); 
    } 
    printf("\n"); 
} 

ich diesen Fehler:

 
warning: passing argument 1 of ‘open’ makes pointer from integer without a cast 

Wenn ich schreibe "file" statt argv[1], alles in Ordnung ist.

+0

, wie Sie das Programm ausgeführt werden? Sie sollten etwas wie './program filename' machen, wobei der Dateiname die Datei ist, die Sie öffnen möchten. – twain249

+2

'int main (int argc, char ** argv) {...} ' – wildplasser

+1

Wechsel von' int main (int argc, char * argv) 'zu' int main (int argc, char * argv []) ' – rbelli

Antwort

4
int main(int argc, char* argv){ 

sollte ein char ** nicht sein:

int main(int argc, char *argv[]) 

Fehler anzeigen?

-2

diesen paaren Versuchen:

main() { 
    FILE *fin = fopen ("test.in", "r"); 
    FILE *fout = fopen ("test.out", "w"); 
    int a, b; 
    fscanf (fin, "%d %d", &a, &b); /* two input integers */ 
    fprintf (fout, "%d\n", a+b); 
    exit (0); 
} 

statt "test.in" Ihr Argument setzen, haben sie versucht, vor dem ersten zu werfen?

1

char* argv sollte char* argv[]

Was Sie als char* argv hat bekannt, dass folgende und dann argv[1] wird ein char (die eine ganze Zahl ist) anstelle von char *

0

Ihr Problem ist in main() Erklärung, die sein sollte:

int main(int argc, char *argv[]) 

Sie definiert argv als char *, was es zu einem einzigen Zeiger macht, während es ein Array von char * Zeiger ist, wobei jedes char * Element ein Befehlszeilenargument zu Ihrem Programm entspricht.

Der Fehler Sie bekommen durch die Tatsache verursacht wird, dass, wenn Sie passieren argv[1] zu open(), argv[1] ist ein einzelner char, während open() eine char * erwartet.

Eine weitere Verbesserung für Ihr Programm wäre die Überprüfung argc > 1 vor dem Versuch, argv[1] zu verwenden. Dies würde Fälle erfassen, wenn Sie keine Argumente an Ihr Programm übergeben haben.

1

Die korrekte Signatur ist

int main(int argc, char **argv) 
0

argv hat ein char * auch sollten Sie das Programm laufen wie

./program filename

0

Ihre main Signatur ist falsch.

Es sollte wie folgt aussehen:

int main(int argc, const char *argv[]) // notice how 'argv' is now a 'const char *[]', 
Verwandte Themen