我需要为大学作业模拟硬盘。我在struct中有一个char数组,另一个struct有一个最后一个struct的数组,依此类推。老师要求这样做。
typedef struct block {
unsigned char bytes_s[512];
} block;
typedef struct sectror_array {
block sector[60];
} sectror_array;
typedef struct track_array {
sectror_array track[5];
} track_array;
中的所有内容
track_array cylinder[10];
宣布为全球。
我的问题是,我似乎无法访问其中任何一个。在我的代码中,我使用循环将变量分配给"字节"然后尝试打印它
int c=0, t=0, s=0, b=0;
while(c<11){
if(b==512){
b=0;
s++;
if(s==60){
s=0;
t++;
if(t==5){
t=0;
c++;
if(c==10){
return;
}
}
}
}
cylinder[c].track[t].sector[s].bytes_s[b]=0;
b++;
printf("%d %d %d %d, %c\n",c, t, s ,b,
cylinder[c].track[t].sector[s].bytes_s[b]);
但是,即使我试图分配一个&#39;每个字节。
然而它编译并运行没有崩溃。
以前从未与之合作,而且我没有解决如何解决这个问题的想法。
https://github.com/diceEviscerator/trabOA
代码是my_drive.cpp
保存为cpp但是纯c(需要另存为cpp才能运行gtest)
答案 0 :(得分:2)
while (cylinder[j].track[t].sector[s * 4].bytes_s[0] != 0) {
程序不会简单地进入循环。
我尝试通过创建一个为每个字节赋值0的循环来“初始化”结构
那么,你所描述的极简化版本看起来像这样吗?
int main (void)
{
int x = 0; // Initialize to 0
while ( x != 0 ) // While not 0, do some work
{
x = 1;
}
}
将问题分解成小部分并以小增量编码,随时验证每个问题。 “大爆炸”编码一次性增加了太多的复杂性,使问题更难找到。
答案 1 :(得分:0)
到目前为止,问题是我在改变之后打印了这个角色
cylinder[c].track[t].sector[s].bytes_s[b]=0;
b++;
printf("%d %d %d %d, %c\n",c, t, s ,b, cylinder[c].track[t].sector[s].bytes_s[b]);
应该在哪里:
cylinder[c].track[t].sector[s].bytes_s[b]=0;
printf("%d %d %d %d, %c\n",c, t, s ,b, cylinder[c].track[t].sector[s].bytes_s[b]);
b++;
此代码仍然存在问题但这个问题似乎已经解决了。我发布的时候对我来说并不清楚,我希望我能删除,因为它很简单,因此不是新知识,但我不能。