这可能是一个非常讨论的问题,但我仍然无法理解这些机制:
如何将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.我该怎么做呢?再次,对不起,如果这是一个明显的明显 问题或是否曾被问过。谢谢!
答案 0 :(得分:2)
您无法增加数组。但是,您可以创建指向数组中第一个元素的指针,然后递增指针:
char *ptr = &buffer[0]; // Or just char *ptr = buffer;
ptr += 512;
但是,如下所述,您的数组仅为512字节。如果你增加512,你现在看过数组的末尾,随后将调用未定义的行为。
答案 1 :(得分:1)
首先,您不应该尝试访问数组越界,即在数组的最后一个地址之后访问内存区域。这样做是未定义的行为
即。在char buffer[512];
中,您只能从*buffer
访问*(buffer +511)
。
要以512
的倍数读取大数据,您可以读取buffer
中的第一个数据集,打印它然后用下一个数据集覆盖buffer
如果旧的数据集不是需要。否则,您可以预先将buffer
分配为大尺寸(512
的某个倍数,例如1024
等),然后只需将缓冲区作为buffer
访问第一个数据然后为下一个数据集设置buffer + 512
,为第三个设置buffer + 512*2
,依此类推。
正如其他人也指出的那样,数组名总是指向数组的基地址,你不能改变它,因此你需要使用虚拟指针说ptr
来访问数组中的任何索引。 / p>
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);
答案 2 :(得分:1)
如果您将buffer
增加512
- >你将从边界访问数组
尝试使用矩阵:
...
char buffer[2][512];
readSector(buffer[0],2);
readSector(buffer[1],3);
...
答案 3 :(得分: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];
意味着通过抵消我可以实现我想要的。谢谢大家!
答案 4 :(得分:0)
你的想法是对的,唯一的事就是当你宣布
时 char buffer[512];
缓冲区变为const类型,不能再增加。
char * p = buffer;
现在这个p与缓冲区相同,但它不是const类型,所以你可以增加p。
p += 3;
将指向缓冲区加3位置。