2017-10-10 2 views
0

完全に間違っている、目標はその後、tmpファイルに構造により、ファイル構造から情報をコピーすることで、いくつかの操作を行い編集して、新しい情報を新しいデータファイルに保存します。私が今しようとしているのは、ファイルを取得してから印刷することだけです。Cのデータファイルのプリントアウト私は、ディレクトリからファイルを取得し、メモリにそれを維持しようとしています

FredHutcheson À@LarryStarchÍ̼@LucyLu-FredFlintstone 33£@BarnyRubbleÍÌ[email protected]³@RobertHenderson7ffÆ@BobbyNLMcÍ̼@BettyDurnanJPBFloodProfÀ@ 

私は本当に正確に見えるようになっているのか分からないが、その間違いはないこと:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

typedef struct hw5_struct { 
    char f_name[12]; 
    char l_name[12]; 
    int age; 
    float height; 
}HW5_struct; 

void printThisFile(FILE *data); 

int main(int argc, char *argv[]) { 
    const char *fileLocation = argv[1]; 

    FILE *originalData = fopen(fileLocation, "r"); 

    if(access(fileLocation, F_OK) != -1) 
     printf("The file at %s exists\n", argv[1]); 

    printThisFile(originalData); 

    //int sizeOfOriginalData = sizeOf(&originalData); 

} 

void printThisFile(FILE *data) { 
    printf("printThisFile called\n"); 

    int c; 
    if (data) { 
     printf("printing file contents now:\n"); 
     while((c = getc(data)) != EOF) 
      printf("%c", c); 
     fclose(data); 
    } 
} 

それは次のように出力します。

+0

すべての警告とデバッグ情報でコンパイル(そう 'gccの-Wall -Wextra -g'(http://gcc.gnu.org/)[GCC]と.....)。デバッガ** gdb'を使用します。いくつかの8進またはヘキサダンプユーティリティを使用して、ファイルの内容を理解することもできます。 [od](http://man7.org/linux/man-pages/man1/od.1.html) –

+1

一見すると、あなたの出力は暗黙的なファイル形式と互換性があります。 –

+1

そのような 'access()'を使うのは、ほとんど無意味です。あなたがそれを使うつもりなら、 'fopen()'を呼び出す前にそれを呼びますが、気にしないでください。呼び出した関数ではなく、 'fopen()'を呼び出す関数でファイルが開かれたことを確認する必要があります。データファイルに何があるのか​​わからない場合は、どうすれば助けになるでしょうか?ファイルにこれらのレコードを書いたプログラムを表示する必要があるかもしれません。あなたは 'fwrite()'を使ったのですか?レコードを読み込むために 'fread()'を使わないのはなぜですか? –

答えて

1

何がそれはあなたが対応するバイナリを実行して、ファイルをロードする必要がある場合ですが

FILE *originalData = fopen(fileLocation, "rb");

HW5_struct tempStruct;

を読めば、ファイルが hw5_struct

のバイナリバージョンを書いていたことを書いた場合、これは理にかなって

fread (&tempStruct, sizeof(hw5_struct),1, data);

それから、ビットを印刷することによってそれを選ぶことができます。

printf("%s %s %d %f\n", tempStruct.f_name, tempStruct.l_name,tempStruct.age, tempStruct.height);

あなたの現在の読み取りコードは、テキストファイルのみで動作します。

+0

私はCにはとても新しく、これは多くの助けとなりました。 –

+0

良いもの。 Cはトリッキーです。あなたがより現代的な言語に変わるとき、素晴らしい基盤ですが、この奇妙さの大部分は消え去ります(または少なくとも少し変化します)。答えを受け入れ、私が渇望する評判を与えることを自由に感じてください:) – LoztInSpace

関連する問題