結構體與字元陣列
阿新 • • 發佈:2022-04-12
字元陣列在此情況下可以建立
結構體賦值
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列印為亂碼