我有一个声明为const char * server = NULL;
当用户使用下面的代码将服务器的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);
答案 0 :(得分:1)
作业不正确。正确的分配是
server = lwm2m.server;
答案 1 :(得分:0)
您
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);