struct-C中的字符串文字
我需要在结构中封装一个文本字符串。下面的代码不会编译,但希望能说明我想做什么struct-C中的字符串文字,c,C,我需要在结构中封装一个文本字符串。下面的代码不会编译,但希望能说明我想做什么 struct my_struct { char* str = "string literal"; }; 您必须创建结构的实例,然后设置str成员。如果您计划使用字符串文字,您确实应该将其更改为const char*str struct my_struct { const char* str; }; int main() { struct my_struct s1; s1.str = "str
struct my_struct
{
char* str = "string literal";
};
您必须创建结构的实例,然后设置
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"};
不能初始化结构声明中的任何成员。创建结构实例时,必须初始化结构
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);
或者使用预处理器初始化它:
或从已知对象复制:
正如已经给出的答案所表明的,结构声明和初始化必须分开,并且如果
my_struct
的所有实例都需要这样做,则必须一致地应用这一点。C++提供了更好的解决方案;如果可以使用C++编译,那么可以使用构造函数自动实现如下:
struct my_struct
{
my_struct() : str("string literal"){}
char* str ;
};
然后,对于my_struct的所有实例,str将在实例化时指向literal常量
“string literal”
。但是请注意,这是指向常量字符串的非常量指针。不允许直接初始化。相反,我们可以做的是将它变成一个指针,并将它指向您想要的字符串 另一种方法,但仍然必须使用默认初始化实例来初始化新实例
struct my_struct
{
const char * str;
} ms_def {
.str = "value"
};
int main()
{
my_struct obj = ms_def;
printf("%s\n", obj.str);
return 0;
}
哇!很多可能性。把它声明为静态变量怎么样?我试过了,但它不允许我这么做。静态变量不应该是
C结构的一部分吗。如果是,如何进行@Mahesh不,你不能在C中这样做(但是ideone.com/NjkPJ上的代码在C++中是可以的)是的,我知道这在C++
中是可能的。另一个区别是B/W C和C++结构。谢谢,帮了大忙。谢谢你提供了各种init选项。我相信,唯一的答案是将字符串文字封装成结构,正如所陈述的。@ Iurii是真的,但是问题是标记C不C++。在2011,你可以在C问题上提到C++,这样就可以逃脱了。然而,这些天来,我希望这个答案会被大量否决。C和C++已经偏离了,但是对于一些保持它们严格分开的来说似乎是不可协商的。它今天充其量只能发表评论,可能仍会招致批评。
struct my_struct
{
my_struct() : str("string literal"){}
char* str ;
};
struct my_struct
{
const char * str;
} ms_def {
.str = "value"
};
int main()
{
my_struct obj = ms_def;
printf("%s\n", obj.str);
return 0;
}