2017-11-27 7 views
0

ファイルシステムコールを使用してコマンドライン引数(テキストファイルのアドレスを渡すと仮定)を取得し、そのファイルの内容を返すプログラムを割り当てました。私はこれまでのところこのコードを持っていますが、ファイルから受け取った情報を印刷するとともに、引数として渡されたテキストファイルを認識するという点でコンパイラがエラーを出す理由を理解できないようです。どんな種類の支援/助けでも大歓迎です。1つのコマンドライン引数をとり、ファイルの内容を標準出力に出力するプログラム。

#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

エラーメッセージは何が? – PhillipD

+0

@PhillipD IDステータス1つのファイル形式は、私の以前のバージョンのみを返す-1とprintfの 'では、ファイルの内容 –

+0

を出力していなかったにも認識されない("% s "、bytes);' '%s '' 'は文字列を表示するためのものですが、' 'bytes'数字です。 'buffer'はヌルで終了する文字列ではないので、' '%s" 'は正しいフォーマットではありません。参照を確認してください! –

答えて

0

次提案コード:

  1. は、ヘッダファイルが含まれている理由のエラー
  2. 文書のための望ましい機能
  3. 適切なチェックを実装して、質問にコメントを内蔵しています。一般に、ヘッダーファイルが含まれている理由を説明できない場合は、それを含めないでください。あなたが実際にそのヘッダファイルが必要な場合(コンパイラは、あなたを教えてくれますし、コンパイルなぜ
  4. ときは、常にこれらの警告を修正した後、警告を有効(gccのために、最低限の使用で:

-Wall -Wextra -pedantic -Wconversion -std=gnu11と今、提案したコード。

#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; 
} 
関連する問題