我將創建一個位圖,該位圖保存512位的控制權,所有512位應該爲0,以表示程序啓動時該位是空閒的。函數occupyDataBlocks(int number)應該找到空閒位將數組中的位置位int data_blocks []並將佔位位設置爲1.C中的位圖,二進制運算
下面是一些代碼,它執行一些工作:除char位[512/8]是在函數內部聲明的,所以當我調用occupyDataBlocks時會聲明一個數組,這會在我的編程中產生相同的輸出和大的失敗,當我嘗試將char位聲明爲全局時,程序返回的內存不足變量。
我需要幫助來獲得代碼來實現這一點,並設置位爲 佔用。請給我一個編碼的手,我有解決方案的理解,但不能表達它C.
#include <stdio.h>
#include <string.h>
void occupyDataBlocks(int number)
{
int ab = number;
char bit[512/8];
int bitNum = 0;
int count;
int data_blocks[ab];
int b = 0;
for(bitNum = 0; bitNum < (sizeof(bit)/sizeof(char)); bitNum++) {
char x = bit[bitNum];
for(count = 0; x != 0; x >>= 1) {
if(!(x & 0)) {
data_blocks[b++] = count;
}
if(count == number) {
break;
}
count++;
}
if(count == number) {
break;
}
}
if(count == number) {
int a;
for(a = 0; a < 5; a++) {
printf("%d\n", data_blocks[a]);
}
} else {
printf("Not enough data blocks\n");
}
}
int main(void)
{
occupyDataBlocks(3);
occupyDataBlocks(3);
return 1;
}
#include <stdio.h>
#include <string.h>
int occupyDataBlocks(char bit, int number)
{
int ab = number;
int bitNum = 0;
int count;
int data_blocks[ab];
int b = 0;
for(bitNum = 0; bitNum < (sizeof(bit)/sizeof(char)); bitNum++) {
char x = bit[bitNum];
for(count = 0; x != 0; x >>= 1) {
if(!(x & 0)) {
data_blocks[b++] = count;
}
if(count == number) {
break;
}
count++;
}
if(count == number) {
break;
}
}
if(count == number) {
int a;
for(a = 0; a < 5; a++) {
printf("%d\n", data_blocks[a]);
}
} else {
printf("Not enough data blocks\n");
return 0;
}
return 1;
}
int main(void)
{
unsigned char bit[512/8];
/*
* I need 3 data blocks that is ready for me to use. Put the position to the free data block in array data_blocks[],
* where data_blocks[0] can be 100 (the first free data block), data_block[1] = 400 (second free datablock) etc.
*
*/
int data_blocks[3];
memcpy(data_blocks, occupyDataBlocks(bit, 3), sizeof(data_blocks));/* A try to copy the result of occypyDataBlocks to data_blocks*/
return 1;
}
平臺什麼你在忙?我很難相信它不會讓你聲明64字節的全局變量。 – 2010-10-17 18:07:57
是這個作業嗎? – 2010-10-17 18:33:38
Jepp。這是作業 – user265767 2010-10-17 18:42:44