C 结构体问题

标签 c struct buffer

这是我的代码。 我不知道如何在 C 中使用结构。有人可以看看我为什么会收到此错误吗?我通常不使用 C 语言编写代码,有人告诉我可能需要在其中使用指针。

 #include <pthread.h>
   #include <stdio.h>
   #include <unistd.h>
   #include <stdlib.h>
   #include <errno.h>
   #include <assert.h>


   struct Buffer
        {
            int link;
            char message[30];   
        }buffers[3];

    //5 philosopher boxes and one available
    int boxArray[6] = {0, -1, -1, -1, -1, -1};

    buffers[0].link = 1;
    buffers[0].message = "empty";

    buffers[1].link = 2;
    buffers[1].message = "empty";

    buffers[2].link = -1;
    buffers[2].message = "empty";

    void sendMessage (int philNum, char newMessage)
        {
            int header;

            header = boxArray[0];

            boxArray[0] = buffers[header].link;

            buffers[header].message = newMessage;

            if (boxArray[philNum] == -1)
                {
                    boxArray[philNum] = header;
                    buffers[header].link = -1;
                }

            else 
            {
                int i = boxArray[philNum];
                int temp;

                do  
                {
                    temp = buffers[i].link;

                    if (temp == -1)
                    {
                        buffers[i].link = header;
                    }

                    else 
                    {
                        i = buffers[i].link;
                    }
                }while (temp = -1);

            }
        }

输出。我不明白这里的问题是什么

Message.c:17:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
     buffers[0].link = 1;
               ^
Message.c:18:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
     buffers[0].message = "empty";
               ^
Message.c:20:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
     buffers[1].link = 2;
               ^
Message.c:21:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
     buffers[1].message = "empty";
               ^
Message.c:23:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
     buffers[2].link = -1;
               ^
Message.c:24:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
     buffers[2].message = "empty";
               ^
Message.c: In function ‘sendMessage’:
Message.c:34:28: error: assignment to expression with array type
    buffers[header].message = newMessage;

最佳答案

这些是作业;您可以将它们与全局声明一起放置,但不允许它们出现在函数之外:

buffers[0].link = 1;
buffers[0].message = "empty";
buffers[1].link = 2;
buffers[1].message = "empty";
buffers[2].link = -1;
buffers[2].message = "empty";

您需要将它们替换为初始化程序:

struct Buffer {
    int link;
    char message[30];   
}buffers[3] = {
    {.link = 1, .message = "empty"}
,   {.link = 2, .message = "empty"}
,   {.link =-1, .message = "empty"}
};

上面使用了 designated initializers 的 C99 语法.

Demo.

关于C 结构体问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41031035/

相关文章:

node.js - aws lambda : string yields empty buffer 中的 gm 错误

c - 如何使用指针访问递归结构

c - 链表程序中的段错误

c,将结构作为参数传递

c - 具有共享内存和初始化的结构

c++ - 用于序列化/反序列化的标准 C++ 代码

c - Lua调用C函数的性能

c - 为什么枚举在 C 中有名称?

c - 空闲内存用于 C 中的结构但失败(代码来自 C Primer Plus 第 6 版)

c - C/C++ 编程中%0x%x 是什么意思?