字符数组在此情况下可以创建
结构体赋值
struct one
{
char a;
int b;
char c[];
}a1, a2, a3;
a1.a = 'a';
a1.b = 1;
但是不能
a1.c = "aaaaa";
错误 2 error C2106: “=”: 左操作数必须为左值 c:\code\project2\project2\源.c 16 1 Project2
原因同之前的字符数组赋值
只能在创建时赋值,如下
struct one a4 = { 'a', 1, "abcde" };
#include <stdio.h>
int main()
{
struct one
{
char a;
int b;
char c[];
}a1, a2, a3;
a1.a = 'a';
a1.b = 1;
// a1.c = "aaaaa";
struct one a4 = { 'a', 1, "abcdef" };
printf("%c %d %s\n", a4.a, a4.b, a4.c);
printf("%d\n", sizeof("aaaaa"));
printf("%c %d %s\n", a2.a, a2.b, a2.c);
printf("%d\n", sizeof(a4));
printf("%d\n", sizeof(a2));
a2 = a4;
printf("%d\n", sizeof(a4));
printf("%d\n", sizeof(a2));
printf("%c %d %s\n", a2.a, a2.b, a2.c);
getchar();
return 0;
}
结构体中可以创建不指定大小的字符数组
但在此情况下

其一 结构体字节数不正常,疑似在赋值“abcdef”前已经确定为8,赋值后无改变
其二 同类型结构体赋值时,a2=a4;后,a2的字符数组打印为乱码,a4正常
其三 当字符数组指定大小大于其赋值的常量字符串时,a2与a4打印皆正常(比如ch c[7];),
且结构体字节数也恢复正常
不明之处在于未指定大小的情况下
a2=a4;后,a2打印为乱码

浙公网安备 33010602011771号