填充数组的机制

Dar*_*ell 2 c arrays populate dynamic-arrays

我试图填充一系列结构,定义如下:

typedef struct{
    char directive[5];
}directive_nfo_t;
Run Code Online (Sandbox Code Playgroud)

通过使用以下内容:

directive_nfo_t directive_list[]=
{
   {"ALIGN"},{"ASCII"},{"BSS"},{"BYTE"},{"END"},{"EQU"},{"ORG"}
};
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,前几个元素被破坏了如下:

[0]= ALIGNASCIIBSS
[1]= ASCIIBSS
[2]= BSS
...
Run Code Online (Sandbox Code Playgroud)

直到我做出以下改变:

typedef struct{
    char directive[6];  <-- made char array +1
}directive_nfo_t;
Run Code Online (Sandbox Code Playgroud)

然后前几个数组是正确的,如下所示:

[0]= ALIGN
[1]= ASCII
[2]= BSS
...
Run Code Online (Sandbox Code Playgroud)

我的问题是在后台解释这种行为会发生什么?问候.

Joh*_*ode 13

在C中,字符串是一系列字符值,后跟一个0值终结符; 的字符串 "ASCII"由字符序列表示'A','S','C','I','I',0.因此,您需要一个元素数组来存储字符串.

对于N字符长的字符串,您需要一个N+1字符数组来存储它.