我正在尝试使用特定参数定义结构,但我想知道是否有更好的方法可以在不使用内存分配的情况下初始化该结构。
结构定义:
#define MAXLINE 1024
#define MAXNAME 256
#define MAXPATH 1024
typedef enum {
BL_MESG = 10
} mesg_kind_t;
// mesg_t: struct for messages between server/client
typedef struct {
mesg_kind_t kind; // kind of message
char name[MAXNAME]; // name of sending client or subject of event
char body[MAXLINE]; // body text, possibly empty depending on kind
} mesg_t;
typedef struct {
char name[MAXPATH];
} client_t;
我如何创建msg_t
mesg_t create_mesg(client_t *client, char *text){
char * cl_name = client->name;
mesg_t msg = {BL_MESG, "", ""};
strcpy(msg.name, cl_name);
strcpy(msg.body, text);
return msg;
}
有没有办法在不使用strcpy的情况下对其进行初始化?有什么明显的我完全想念的地方吗?
你不能这样子。您需要使用通过值传递和复制的内容。在C中可以是struct
或union
。
#define MAXLINE 1024
#define MAXNAME 256
#define MAXPATH 1024
typedef enum {
BL_MESG = 10
} mesg_kind_t;
struct names
{
char name[MAXNAME];
};
struct bodys
{
char body[MAXNAME];
};
typedef struct {
char name[MAXPATH];
} client_t;
// mesg_t: struct for messages between server/client
typedef struct {
mesg_kind_t kind; // kind of message
client_t name; // name of sending client or subject of event
struct bodys body; // body text, possibly empty depending on kind
} mesg_t;
#define MAKENAME(str) (struct bodys){str}
#define MAKEBODY(str) (client_t){str}
mesg_t create_mesg(client_t *client, struct bodys text){
mesg_t msg = {BL_MESG, *client, text};
return msg;
}
void foo()
{
create_mesg(&MAKEBODY("This is client"), MAKENAME("this is body"));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句