【问题标题】:C: how do I assign values to my typed structure?C:如何为我的类型化结构赋值?
【发布时间】:2018-08-06 09:34:12
【问题描述】:

jldupont's answer 定义具有不同数据的变量之后,我定义了以下内容:

enum buffer_format
{ 
    FIFO_U8T = 0, 
    FIFO_U16T 
};

struct buffer_param
{
    enum buffer_format type;
    union
    {
        struct buffer_fifo_u8_t *fifo_u8;
        struct buffer_fifo_u16_t *fifo_u16;
    } is;
};

然后我编写了以下作业:

struct buffer_param fifo_uartTx_param;
fifo_uartTx_param.is.fifo_u8 = &fifo_uartTx;
fifo_uartTx_param.type = FIFO_U8T;

但是,我遇到了一些错误,抱怨我不能简单地进入我的 buffer_param 类型结构来进行这些分配。如何将指针分配给 UART fifo 并设置其类型?

error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
 fifo_uartTx_param.is.fifo_u8 = &fifo_uartTx;
                  ^
error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token
 fifo_uartTx_param.type = FIFO_U8T;
                  ^

【问题讨论】:

  • 嗯,编译器消息告诉你问题出在哪里。访问 is 联合的成员时,您需要一个点 . 而不是箭头 ->。但是编译器没有告诉你的是,你也没有为 fifo_uartTx_param 分配任何内存(你声明了一个指针,然后在没有初始化它的情况下取消引用该指针 - 这是未定义的行为,如果你很幸运你的程序只会崩溃)。
  • fifo_uartTx_param->is 不是指针。所以访问它的字段是用.
  • 可能不需要将fifo_uartTx_param 设为指针,只需将其设为普通变量即可。然后使用. 代替->
  • 我已按照建议进行了更改(将fifo_uartTx_param 设为普通变量并使用. 访问结构字段),但在编译时仍然收到错误。

标签: c struct types variable-assignment


【解决方案1】:

您遇到错误是因为您尝试在函数之外进行分配。只允许带有初始化器的定义。

要初始化此变量,请执行以下操作:

struct buffer_param fifo_uartTx_param = 
    { .type = FIFO_U8T, .is= { .fifo_u8 = &fifo_uartTx } };

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2015-12-20
    • 2011-01-20
    • 2013-11-04
    相关资源
    最近更新 更多