私は最初のCプログラミングクラスで最初のプロジェクトに取り組んでおり、ポインタで迷っています。私たちはいろいろな方法でビットマップを変更する必要があります。私はファイルポインタを使用して、使用したいバイトデータを取得する方法を理解するのに苦労しています。私はビットマップファイルのヘッダーとDIBヘッダー構造とそれらを構成する値のバイトオフセットを知っています。しかし、後でファイルポインタを使用するためにこれらの値をそれぞれ保存する方法を理解するのが難しいです。これはプロジェクトのためのものですから、私はあまりにも多くの助けを求めたくありません。ここに私のこれまでのコードと私は、ヘッダの部分捕獲しようとしてきたさまざまな手段である:EOF
はfgetc
を使用して遭遇するまでループはファイル全体を横断し、各文字を印刷する間、私はまた、簡単なテストビットマップヘッダのバイトを解析してファイルポインタで保存する
int main(int argc, const char * argv[]){
FILE *fp;
char buff[2]; //only trying '2' to try and capture 'BM' at start of file.
fp = fopen(argv[1], "r+b");
fseek(fp, 0, SEEK_END);
long fsize = ftell(fp);
rewind(fp);
// this is where I test what to do but can't get it correct
unsigned short filetype = fgetc(fp);
printf("First letter of filetype %c\n", filetype); //prints 'B' which is awesome
//Now I do not understand how to capture both the 'BM'.
//I've changed to use the fread as follows:
fread(buff, sizeof(char), 2, fp);
printf("Captured bytes with fread %s\n", buff) //this prints 4 char's and not 2?
fclose(fp);
return 0;
}
は、働いた。だから私はfgetc
の各呼び出しで、ポインタの現在のバイト位置を現在の位置+ 1に変更すると仮定しています。
私は完全にファイルポインタを使用して多数のバイト単一のストアド変数に変換します。私もfseek
とfgets
を試してみました。
私はここでコミュニティから得ることができる助けと入力を感謝します。
現在の理解を確認するには:Cの文字列とは何ですか? – immibis
@immibis文字の配列 – Pwrcdr87
'printf'のような関数はどのように終わりを知っていますか? – immibis