rabbbbit

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

字符数组在此情况下可以创建

结构体赋值

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打印为乱码

 

posted on 2022-04-12 22:41  Rabbbb1t  阅读(140)  评论(0)    收藏  举报