C迭代结构数组

dor*_*thy 2 c arrays struct

说我已经声明了一个结构

struct mystruct {
  char a[10];
  double b;
} 

struct mystruct array[20] = { 
   {'test1',1.0},
   {'test2',2.0}  <---- I just want to declare 2 items first because I am going to add new ones later.
};
int i;
for( i=0; array[i].a != NULL ;i++){ 
    ....  <--- so here I just want to display what is initialized first
} 
Run Code Online (Sandbox Code Playgroud)

但是,for循环显示超过2个项目(即20个项目,但所有其余项目都是垃圾).我只想显示当前只有初始化的内容,即使我声明要存储20个.怎么做?谢谢.

我正在使用C90标准.此外,假设我将来添加了更多项目,但仍然少于20项,我只想显示直到"最后一项有效".

Jon*_*ler 6

对于将接受初始化语法(应该是任何标准C编译器)的编译器,您应该能够编写:

struct mystruct
{
  char a[10];
  double b;
};  // semi-colon added!

struct mystruct array[20] =
{ 
   { "test1", 1.0 },  // character strings!
   { "test2", 2.0 },
};
enum { ARRAY_SIZE = sizeof(array) / sizeof(array[0]) };

int i;
for (i = 0; i < ARRAY_SIZE && array[i].a[0] != '\0'; i++)
{ 
    printf("[%s] => %f\n", array[i].a, array[i].b);
}
Run Code Online (Sandbox Code Playgroud)

  • +1和OP的注释.不养成这个习惯.它使代码更难阅读,特别是你的代码变得"更新 - 脆弱".假设您只有3个而不是20个元素.现在假设有人关注您,看到代码并想要添加第三个元素.好吧,看看那个,他们认为......这已经是它的空间,所以我们只是将它添加到最后.突然间,你正在走向未定义的行为.如果你打算这样做,请确保它是*很好* - 记录. (2认同)
  • ...然后乔纳森提出了硬限制,使我先前的评论没有实际意义.= P嘿.在那里你再去,编写固体代码;-) (2认同)