C结构中怪异的const char指针成员初始化

时间:2019-08-14 02:28:34

标签: c

libwebsockets库示例中,有一个类型为struct lws_http_mount且初始化为here的变量。 stuct lws_http_mount被声明为here。为了方便起见,下面是其声明和定义的摘录。

struct lws_http_mount {
   const struct lws_http_mount *mount_next;
   const char *mountpoint;
   const char *origin;
   const char *def;
   const char *protocol;
   const struct lws_protocol_vhost_options *cgienv;
   const struct lws_protocol_vhost_options *extra_mimetypes;
   const struct lws_protocol_vhost_options *interpret;
   int cgi_timeout;
   int cache_max_age;
   unsigned int auth_mask;
   unsigned int cache_reusable:1;
   unsigned int cache_revalidate:1;
   unsigned int cache_intermediaries:1;
   unsigned char origin_protocol;
   unsigned char mountpoint_len;
   const char *basic_auth_login_file;
   void *_unused[2];
};

static const struct lws_http_mount mount_localhost1 = {
   /* .mount_next */           NULL,
   /* .mountpoint */           "/",
   /* .origin */               "./mount-origin-localhost1",
   /* .def */                  "index.html",
   /* .protocol */              NULL,
   /* .cgienv */                NULL,
   /* .extra_mimetypes */       NULL,
   /* .interpret */             NULL,
   /* .cgi_timeout */           0,
   /* .cache_max_age */         0,
   /* .auth_mask */             0,
   /* .cache_reusable */        0,
   /* .cache_revalidate */      0,
   /* .cache_intermediaries */  0,
   /* .origin_protocol */       LWSMPRO_FILE,
   /* .mountpoint_len */        1,
   /* .basic_auth_login_file */ NULL,
}

此结构的成员mountpoint的类型为const char*。已在变量"\"中将其初始化为mount_localhost1。在此结构内为其成员mountpoint分配的实际 char数组大小是什么?

我只知道结构中的char数组成员声明应以char mountpoint[string_length]而不是const char* mountpoint来完成。

1 个答案:

答案 0 :(得分:1)

在内存中创建字符串文字(char数组)"/",并使用该内存的地址初始化常量char指针mountpoint

没有“在此结构内分配的实际char数组大小”。

它与初始化局部变量如:

没什么不同
const char *mountpoint = "/";

变量(const char *)的大小仅是指针的大小。实际的字符串(字符数组)为somewhere else,它与字符指针本身无关。