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)
,以防止缓冲区溢出(这可能是您的问题)。