Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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_Struct - Fatal编程技术网

C 初始化从指针生成整数而不强制转换

C 初始化从指针生成整数而不强制转换,c,struct,C,Struct,我试图用特定的参数定义一个结构,但我想知道是否有更好的方法来初始化结构而不使用内存分配 结构定义: #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_

我试图用特定的参数定义一个结构,但我想知道是否有更好的方法来初始化结构而不使用内存分配

结构定义:

#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;
我是如何创建消息的

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"));
}

该代码没有标题中提到的错误。因此,要么修复标题,要么显示您询问的代码。我无法设置强制转换、内存分配和strcpy之间的连接。你能说得更具体些吗?要动态初始化它吗?你到底想做什么?strcpy有什么问题?为什么要避免内存分配?