将字符串复制到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上?
数组太小,N
一串N
字符需要字符+1 。
这是严格未定义的行为,但是观察到的行为可以归因于以下事实:的存储struct
是连续分配的,因此您正在打印由两个数组组成的“大字符串”。
但是这种假设也是错误的,因为“大字符串”缺少'\0'
终止符,因为您已经使用了数组中所有可能的元素并将非'\0'
字符复制到其中。
因此,程序的实际结果应该被认为是不可预测的,而您观察到的行为实际上就是未定义的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句