c编程结构成员变量分配给一个char *
问题描述:
我已经作为const char * server = NULL;
c编程结构成员变量分配给一个char *
该变量被分配一个值的变量声明当用户通过的服务器的IP地址作为命令行参数到c程序使用下面的代码。例如运行./cprogram -h 10.4.0.01
opt = 1;
while (opt < argc)
{
if (argv[opt] == NULL
|| argv[opt][0] != '-'
|| argv[opt][2] != 0)
{
print_usage();
return 0;
}
switch (argv[opt][1])
{
case 'h':
opt++;
if (opt >= argc)
{
print_usage();
return 0;
}
server = argv[opt];
break;
}
我不再需要从程序传递命令行参数,并把该值在ini文件。
我现在在程序开始时读取一个ini文件并将值存储在一个结构中。
struct lwm2m_object {
char clientname[LG_BUF];
char ipv4[LG_BUF];
char server[LG_BUF];
};
在到该结构构件变量server
分配给变量const char * server
正确的方式使用该
server = &(lwm2m.server);
答
分配是不正确的。正确的分配是
server = lwm2m.server;
答
你
server = &(lwm2m.server);
是错上加错。首先,你打算复制的字符串是lwm2m.server
--记住一个数组衰减到一个指针。因此,最好是
server = lwm2m.server; // still dangerous
但是,这仅仅是拷贝的指针数据(浅拷贝)。如果lwm2m_object
lwm2m
超出范围,则关联的字符串lwm2m_object::server
被释放并且可以被重新使用。换句话说,你的副本server
然后变成dangling pointer。
如果您知道是lwm2m
生存server
(所以没有得到一个悬摆指针的危险),那么浅拷贝是好的(和最好)。否则,您必须进行深层复制,使用strcpyn
const char server[LG_BUF];
strcpyn(server, lwm2m.server, LG_BUF);
这里有什么问题? – Curious
您需要使用'strcpy'(或'strncpy')来分配结构中的C字符串。 –
“C”和“C++”是不同的语言。你不应该一起使用标签(除非你的问题是关于''C''与''C++''的接口)。 – nefas