1. 程式人生 > 其它 >結構體與字元陣列

結構體與字元陣列

字元陣列在此情況下可以建立

結構體賦值

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列印為亂碼