Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:如何创建一个结构?_C_Unix_Gcc_Shared Memory - Fatal编程技术网

C:如何创建一个结构?

C:如何创建一个结构?,c,unix,gcc,shared-memory,C,Unix,Gcc,Shared Memory,我有一个结构,看起来像这样: struct data { int code; char name[25], fnum[8]; }; int dataSID = shmget(100002, sizeof(struct data), IPC_CREAT | 0666); struct data *com = shmat(dataSID, 0, 0); 然后我尝试将其用作共享内存,如下所示: struct data { int code; char name[25], fnum

我有一个结构,看起来像这样:

struct data {
  int code;
  char name[25], fnum[8];
};
int dataSID = shmget(100002, sizeof(struct data), IPC_CREAT | 0666);
struct data *com = shmat(dataSID, 0, 0);
然后我尝试将其用作共享内存,如下所示:

struct data {
  int code;
  char name[25], fnum[8];
};
int dataSID = shmget(100002, sizeof(struct data), IPC_CREAT | 0666);
struct data *com = shmat(dataSID, 0, 0);
然后像这样附上它:

struct data {
  int code;
  char name[25], fnum[8];
};
int dataSID = shmget(100002, sizeof(struct data), IPC_CREAT | 0666);
struct data *com = shmat(dataSID, 0, 0);
最后,我尝试填充如下值:

(*com).code = 1;
scanf("%s", (*com).name);
我在
scanf
上发现了分段错误

我做错了什么


shmat
是否为结构正确分配内存?

对于字符数组,您始终可以使用strcpy()strncpy()。建议使用哪种strncpy(),这有助于避免缓冲区溢出。

我假设shmget成功了?请显示一个。只要
scanf
没有超出25字节缓冲区(包括终端null),您的代码就可以在我构建的一个小程序中工作。如果
scanf
处理的字符数超过24个,则缓冲区溢出。@netcoder:请注意,OP将
name
声明为数组,而不是指针。好的,给定的代码段似乎在新的空程序中工作。不过,在我的原始程序的上下文中,它并不存在,我将调查并返回更新的代码。您应该在
scanf
中指定字符串的宽度,例如:
scanf(“%.24s”,com->name)
,以防止缓冲区溢出(这可能是您的问题)。