将char分配给结构内部的字符数组,该结构位于结构数组

时间:2017-06-06 22:35:33

标签: c arrays struct

我需要为大学作业模拟硬盘。我在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)

2 个答案:

答案 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++;

此代码仍然存在问题但这个问题似乎已经解决了。我发布的时候对我来说并不清楚,我希望我能删除,因为它很简单,因此不是新知识,但我不能。