簡體   English   中英

struct-C中的字符串文字

[英]String literal inside struct - C

我需要在結構中封裝一個文字字符串。 下面的代碼不會編譯,但希望說明我想做什么?

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

您無法初始化結構聲明中的任何成員。 您必須在創建結構實例時初始化結構。

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;

不允許直接初始化。 相反,可以做的是使它成為指針並將其指向您想要的字符串。

您必須創建結構的實例,然后設置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"};
}

我想你想要這個:

struct my_struct
{
    char* z;
};

// ...

struct my_struct s = {"string literal"};

正如已經給出的答案所示,結構聲明和初始化必須是分開的,如果my_struct所有實例都需要它,則必須一致地應用它。 C ++提供了更好的解決方案; 如果您可以使用C ++編譯,那么可以使用構造函數自動執行此操作,如下所示:

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

然后對於my_struct所有實例,str將在實例化時指向文字常量"string literal" 但要注意,這是一個指向const字符串的非const指針。

另一種方法,但仍然必須使用默認初始化實例來初始化新實例。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM