struct-C中的字符串文字

Mas*_*eif 5 c

我需要在结构中封装一个文字字符串.下面的代码不会编译,但希望说明我想做什么?

struct my_struct
{
char* str = "string literal";
};
Run Code Online (Sandbox Code Playgroud)

nos*_*nos 16

您无法初始化结构声明中的任何成员.您必须在创建结构实例时初始化结构.

struct my_struct
{
   char* str;
};

int main(int argc,char *argv[]) 
{
  struct my_struct foo = {"string literal"};
  ...
}
Run Code Online (Sandbox Code Playgroud)

由于您希望 str成员引用字符串文字,因此您最好将其const char *str设为a ,因为您无法以任何方式修改字符串文字.

另外

提供初始化功能

每次都将结构初始化为已知状态.

struct my_struct
{
   const char* str;
   int bar;
};

void init_my_struct(strut my_struct *s)
{
   s->str = "string literal";
   s->bar = 0;
}
int main(int argc,char *argv[]) 
{
  struct my_struct foo;
  init_my_struct(&foo);
Run Code Online (Sandbox Code Playgroud)

或者使用预处理器初始化它:

struct my_struct
{
   const char* str;
   int bar;
}; 

#define MY_STRUCT_INITIALIZER {"string literal",0}
int main(int argc,char *argv[]) 
 {
   struct my_struct foo = MY_STRUCT_INITALIZER;
Run Code Online (Sandbox Code Playgroud)

或者从已知对象复制:

struct my_struct
{
   const char* str;
   int bar;
};
const struct my_struct my_struct_init = {"string_literal",0};

int main(int argc,char *argv[]) 
{
   struct my_struct foo = my_struct_init;
Run Code Online (Sandbox Code Playgroud)