2017-11-27 3 views
0

Mir wurde ein Programm zum Schreiben zugewiesen, das Dateisystemaufrufe verwendet, um ein Befehlszeilenargument zu übernehmen (unter der Annahme, dass Sie eine Textdateiadresse übergeben) und den Inhalt der Datei zurückgibt. Ich habe diesen Code bisher, aber ich kann nicht herausfinden, warum mein Compiler mir Fehler bei der Erkennung der als Argument übergebenen Textdatei gibt, zusammen mit dem Ausdruck der Informationen, die ich von der Datei erhalten habe. Jede Art von Hilfe/Hilfe wird sehr geschätzt.ein Programm, das ein Befehlszeilenargument akzeptiert und den Inhalt der Datei an den Standardausgang ausgibt.

#include <stdio.h> 
#include <stdlib.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <fcntl.h> 



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




int FP; 
ssize_t bytes; 

char buffer [100]; 

if(argc == 1){ 

FP = open(argv[1], O_RDONLY); 
printf("Program name is : %s", argv[0]) 
bytes = read(FP, buffer,sizeof(buffer) -1); 
printf("%s", bytes); 
close(FP); 

} 






return 0; 


} 
+0

Was die Fehlermeldung? – PhillipD

+0

@PhillipD id Status 1 Dateiformat auch nur meine vorherige Version nicht erkannt wurde Rückkehr -1 und nicht den Inhalt der Datei –

+0

In 'printf die Ausgabe ("% s ", bytes);' Das Format '"% s "' dient zum Anzeigen einer Zeichenkette, aber 'bytes' ist eine Nummer. Beachten Sie, dass "buffer" keine Null-terminierte Zeichenfolge ist, also ist "% s" 'auch nicht das richtige Format. Überprüfen Sie die Referenz! –

Antwort

0

die folgenden vorgeschlagenen Code:

  1. enthält die Kommentare auf die Frage
  2. implementiert die gewünschte Funktionalität
  3. ordnungsgemäße Kontrollen für Fehler
  4. Dokumente, warum die Header-Dateien enthalten sind. Wenn Sie nicht angeben können, warum eine Headerdatei enthalten ist, fügen Sie sie nicht hinzu. (Der Compiler wird dann sagen, wenn Sie tatsächlich, dass die Header-Datei benötigen, und warum
  5. beim Kompilieren immer die Warnungen aktivieren, diese Warnungen beheben (für gcc, bei einem minimalen Einsatz. -Wall -Wextra -pedantic -Wconversion -std=gnu11)

und jetzt, die vorgeschlagene Code.

#include <stdio.h> // fopen(), perror(), fgets(), fprintf(), printf(), FILE 
#include <stdlib.h> // exit(), EXIT_FAILURE 


#define MAX_INPUT_LEN 100 

int main(int argc, char *argv[]) 
{ 
    FILE *fp; 
    char buffer [ MAX_INPUT_LEN ]; 

    if(argc != 2) 
    { 
     fprintf(stderr, "USAGE: %s fileName\n", argv[0]); 
     exit(EXIT_FAILURE); 
    } 

    // implied else, correct number of command line parameters 

    printf("Program name is : %s", argv[0]); 
    printf("file to read: %s\n", argv[1]); 

    fp = fopen(argv[1], "r"); 
    if(NULL == fp) 
    { 
     perror("fopen failed"); 
     exit(EXIT_FAILURE); 
    } 

    // implied else, fopen successful 

    while(NULL != fgets(buffer, sizeof buffer, fp)) 
    { 
     printf("%s", buffer); 
    } 

    fclose(fp); 

    return 0; 
} 
Verwandte Themen