c - 填充数组的机制

标签 c arrays dynamic-arrays populate

<分区>

我尝试填充定义如下的结构数组:

typedef struct{
    char directive[5];
}directive_nfo_t;

通过使用以下内容:

directive_nfo_t directive_list[]=
{
   {"ALIGN"},{"ASCII"},{"BSS"},{"BYTE"},{"END"},{"EQU"},{"ORG"}
};

令我惊讶的是,前几个元素像这样损坏了:

[0]= ALIGNASCIIBSS
[1]= ASCIIBSS
[2]= BSS
...

直到我做了以下更改:

typedef struct{
    char directive[6];  <-- made char array +1
}directive_nfo_t;

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

[0]= ALIGN
[1]= ASCII
[2]= BSS
...

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

最佳答案

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

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

关于c - 填充数组的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490731/

相关文章:

c - 关于传递 3 维数组以在 C 中运行的歧义

C++ Valgrind 无效删除动态数组

php - 解构数组时避免 PHP 通知

java - 如何使用输入来创建对象

c - 在 C 中用变量初始化数组

c - 对 `scanf_s' 的 undefined reference

c - "Invalid Argument"通配时出错

c - 将 fftw3 与 fftw 复杂类型一起使用

arrays - 用分而治之的方法用 C 语言编写一个成本为 O(log(n)) 的算法

java - 我在将文本读入数组时遇到问题,我需要在此代码中更改什么?