簡體   English   中英

C 編程 - 將 struct 成員變量分配給 char *

[英]C programming - assign a struct member variable to a char *

我有一個變量聲明為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);

分配不正確。 正確的賦值是

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

暫無
暫無

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

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