c编程将一个struct成员变量赋给char *

时间:2017-06-19 08:49:54

标签: c pointers struct

我有一个声明为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);

2 个答案:

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