0

これはおそらく非常に議論されている質問ですが、私はまだその仕組みを理解できていません:

配列のアドレスに 512 を追加するにはどうすればよいですか?

状況は次のとおりです。

char buffer[512];
readSector(buffer,2);

/*somewhere in here i must increment address of buffer by 512*/

readSector(buffer,3);
printString(buffer);

readSector はバッファ配列を取り込み、ディスクのセクタ 2 の内容をダンプします。次に readSector が再度呼び出され、セクタ 3 の内容がバッファにドロップされます。printString は、バッファの内容を画面に出力するだけです。

私の教授は、readSector を呼び出すたびに、バッファのアドレスを 512 ずつインクリメントする必要があると説明しています。これを行うにはどうすればよいですか? 繰り返しますが、これが露骨に明白な質問である場合、または以前に尋ねられた場合は申し訳ありません. ありがとう!

4

5 に答える 5

1

この質問は本質的に間違っていたことがわかりました。次の指示を注意深く読んだ後:

1. Load the directory sector into a 512 byte character array using readSector
2. Go through the directory trying to match the file name.  If you do not find it, return.
3. Using the sector numbers in the directory, load the file, sector by sector, 
into the buffer array.
You should add 512 to the buffer address every time you call readSector
4. Return

バッファ配列は、実際には main() で初期化された char 配列であり、次のように設定されます。

char buffer[13312];

相殺するだけで、私が望むものを達成できるということです。それでもみんなありがとう!

于 2014-04-16T21:42:28.227 に答える
1

bufferbyをインクリメントする場合512-> 範囲外の配列にアクセスすることになります 行列を使用してみてください:

...
char buffer[2][512]; 
readSector(buffer[0],2);
readSector(buffer[1],3);
...
于 2014-04-16T21:14:11.830 に答える
1

まず第一に、配列の最後のアドレスの後のメモリ領域にアクセスする、範囲外の配列にアクセスしようとしないでください。これを行うことは未定義の動作です

つまり、からまでchar buffer[512];しかアクセスできません。*buffer*(buffer +511)

の倍数で大きなデータを512読み取るには、最初のデータ セットを読み取り、bufferそれを印刷してから、buffer古いデータ セットが必要ない場合は次のデータ セットで上書きします。bufferそれ以外の場合は、大きなサイズ (512たとえばの倍数など) になるように事前に割り当ててから、最初のデータ セット、次に次のデータ セット、 3 番目のデータ セットなど1024のようにバッファにアクセスします。bufferbuffer + 512buffer + 512*2

他の人も指摘しているように、配列名は常に配列のベースアドレスを指しているため、変更することはできません。したがってptr、配列内の任意のインデックスにアクセスするには、ダミーポインターを使用する必要があります。

char buf[1024];
char *ptr = buf;

readSector(ptr,2); // readSector(buf,2);

//buf = buf + 512; // Wrong, compile error
ptr = ptr + 512; // Correct!!

readSector(ptr,3);
printString(buffer);

于 2014-04-16T21:06:52.563 に答える