struct中的char数组成员-复制到这两个成员的值

用户691197

将字符串复制到struct并仅打印一个属性时,将同时打印struct的两个成员。为什么会发生这种情况以及如何克服呢?

typedef struct  {

  char a1[14];
  char a2[2];  

} X;


void main() {

  X x;

  strcpy(x.a1, "55555555555555");
  printf("A1 - %s\n\n", x.a1); 

  strcpy(x.a2, "D5");
  printf("A1 - %s\n\n", x.a1);
  printf("A2 - %s\n\n", x.a2); 

}

输出:

A1 - 55555555555555

A1 - 55555555555555D5

A2 - D5

为什么D5在这里附加到A1上?

伊哈罗布·阿西米(Iharob Al Asimi)

数组太小,N一串N字符需要字符+1

这是严格未定义的行为,但是观察到的行为可以归因于以下事实:的存储struct是连续分配的,因此您正在打印由两个数组组成的“大字符串”。

但是这种假设也是错误的,因为“大字符串”缺少'\0'终止符,因为您已经使用了数组中所有可能的元素并将非'\0'字符复制到其中。

因此,程序的实际结果应该被认为是不可预测的,而您观察到的行为实际上就是未定义的行为

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++中的struct char数组成员初始化

来自分类Dev

在C中,如何“直接”将结构复制到数组成员?

来自分类Dev

用char数组成员填充并集

来自分类Dev

用char数组成员填充并集

来自分类Dev

具有弹性char数组成员的结构

来自分类Dev

C ++中类数组成员的初始化

来自分类Dev

嵌套结构中的灵活数组成员

来自分类Dev

C ++中的灵活数组成员的可移植仿真?

来自分类Dev

Swift:访问数组中的元组成员

来自分类Dev

在C中访问灵活数组成员

来自分类Dev

在类中声明数组成员的正确方法

来自分类Dev

如何在c中传递或声明数组成员?

来自分类Dev

函数中的数组成员比较不起作用

来自分类Dev

Swift:访问数组中的元组成员

来自分类Dev

为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

来自分类Dev

Arduino类数组成员

来自分类Dev

C#数组成员

来自分类Dev

使用指针到达数组成员

来自分类Dev

Arduino类数组成员

来自分类Dev

OR 子句或数组成员检查

来自分类Dev

屏蔽数组成员的位

来自分类Dev

UPPAAL:检查数组成员

来自分类Dev

C#Struct字典键不适用于数组成员

来自分类Dev

使用strcpy()对结构的char数组成员进行分段错误

来自分类Dev

返回指向char数组成员的指针会导致什么意外行为?

来自分类Dev

具有static char *数组成员的模板专门化,以多个单位实例化

来自分类Dev

使用strcpy()对结构的char数组成员进行分段错误

来自分类Dev

在Django Admin中显示组成员

来自分类Dev

组成员不在组中居中