2017-09-17 10 views
0

私は何か違法であることを確認するためにファイルに書き込む度にファイルを読み込むのではなく、ファイルの先頭にあるものを追跡するために、voidポインタからの情報をchar配列に入れようとしています。書かれていない。voidポインタからの情報をchar配列に配置する方法は?

例:意図したとおりに

unsigned long write_file_at(File file, void *data, unsigned long num_bytes, 
          SeekAnchor start, long offset) { 
    fserror=NONE; 
    if (! file->fp || ! seek_file(file, start, offset)) { 
    fserror=WRITE_FAILED; 
    } 
    else if (offset == 0L && !strncmp(data, "MZ", 2) && start == BEGINNING_OF_FILE){ 
    fserror = ILLEGAL_MZ; 

これが正常に動作します。 次に、書き込みが合法で、ファイルの最初のバイトに書き込みたい場合は、バイトに置きたい文字配列に書き込むように書き込みます。

後で同じ書き込み関数の例: )長いif文、まだWIPを無視

else{ 
    bytes_written=fwrite(data, 1, num_bytes, file->fp); 
    if ((num_bytes == 1 || num_bytes == 2) && (start == BEGINNING_OF_FILE 
               || (start == END_OF_FILE && offset == -(ftell\ 
(file->fp))) 
               || (start == CURRENT_POSITION && offset == -(\ 
ftell(file->fp))))){ 
     file->mem[0] = (char *)data;} //This is what I am struggling with 


    if (bytes_written < num_bytes) { 
     fserror=WRITE_FAILED; 
    } 
    } 
    return bytes_written; 
} 

にはどうすればデータポインタから書き込ま・ファースト手紙/バイトを引き、char配列に入れていますか?

+0

- どのように役立つどのような方法でapointerありますこの?ポインタの値はポインタが指しているオブジェクトの存続期間中のみ有効であることは承知していますか?言い換えれば:あなたのプロセスを終了し、ファイルの値は文字どおり無意味です。 – Olaf

+0

「ファイル」とは何ですか? – Olaf

答えて

2

->memはchar型の配列であると仮定すると、あなたがcharキャストポインタを逆参照する必要があります:「ファイルの先頭にあるものを追跡するために、」

file->mem[0] = * /*<= DEREF*/ (char *)data; 
関連する問題