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

2

你不能增加一个数组。但是,您可以创建指向数组中第一个元素的指针,然后递增指针:

char *ptr = &buffer[0];  // Or just char *ptr = buffer;

ptr += 512;

但是,如下所述,您的数组只有 512 bytes。如果您增加 512,您现在正在查看数组的末尾,这将随后调用未定义的行为

于 2014-04-16T21:04:43.403 回答
1

如果您增加bufferby 512-> 您将访问超出范围的数组尝试使用矩阵:

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

Turns out this question was wrong in its nature. After carefully reading the following instructions:

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

The buffer array is actually a char array initialized in main() which is set to

char buffer[13312];

meaning that by just offsetting I can achieve what I want. Thanks nonetheless everyone!.

于 2014-04-16T21:42:28.227 回答
1

首先,您不应该尝试越界访问数组,即访问数组最后一个地址之后的内存区域。这样做是未定义的行为

即在char buffer[512];您只能从*bufferuntil访问*(buffer +511)

要读取倍数的大数据,512可以读取 中的第一个数据集buffer,打印它,然后buffer如果不需要旧数据集,则用下一个数据集覆盖。否则,您可以预先分配大尺寸(例如,buffer的倍数等),然后简单地访问缓冲区作为第一个数据集,然后访问下一个数据集,第三个数据集,依此类推。5121024bufferbuffer + 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 回答
0

你的想法是对的,只有当你宣布

 char buffer[512];

buffer 变成了 const 类型,你不能再增加了。

char * p = buffer;

现在这个 p 和 buffer 一样,但不是 const 类型,所以你可以递增 p。

p += 3;

将指向缓冲区加 3 的位置。

于 2014-04-16T21:09:00.310 回答