struct-C中的字符串文字

时间:2011-02-21 22:05:42

标签: c

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

struct my_struct
{
char* str = "string literal";
};

6 个答案:

答案 0 :(得分:16)

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

struct my_struct
{
   char* str;
};

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

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

替代地

提供初始化函数

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

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

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

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;

或从已知对象复制:

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;

答案 1 :(得分:1)

您必须创建结构的实例,然后设置str成员。如果您打算在其中使用字符串文字,确实应将其更改为const char* str

struct my_struct
{
    const char* str;
};

int main() {
    struct my_struct s1;
    s1.str = "string literal";

    /* or */
    struct my_struct s2 = {"string literal"};
}

答案 2 :(得分:1)

我想你想要这个:

struct my_struct
{
    char* z;
};

// ...

struct my_struct s = {"string literal"};

答案 3 :(得分:1)

正如已经给出的答案所示,结构声明和初始化必须是分开的,如果my_struct的所有实例都需要,则必须始终如一地应用。 C ++提供了更好的解决方案;如果您可以使用C ++编译,那么可以使用构造函数自动执行此操作,如下所示:

struct my_struct
{
    my_struct() : str("string literal"){}
    char* str ;
};

然后对于my_struct的所有实例,str将在实例化时指向文字常量"string literal"。但请注意,这是一个指向const字符串的非常量指针。

答案 4 :(得分:1)

不允许直接初始化。相反,可以做的是使它成为指针并将其指向您想要的字符串。

答案 5 :(得分:1)

另一种方法,但是仍然必须使用默认的初始化实例来初始化新实例。

struct my_struct
{
    const char * str;
} ms_def {
    .str = "value"
};

int main()
{
    my_struct obj = ms_def;
    printf("%s\n", obj.str);
    return 0;
}