这是我的代码。 我不知道如何在 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 语法.
关于C 结构体问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41031035/