簡體   English   中英

struct數組中未定義的元素

[英]Undefined elements in struct array

我正在創建一個客戶端/服務器應用程序,並希望動態調用函數。 我創建了以下結構:

typedef struct _cmd cmd;
struct _cmd
{
    const char *name;
    void (*func)(int s,int ac, char **av);
};

當客戶端向服務器發送命令時,服務器將瀏覽一系列命令:

cmd cmds[] = {
        { "CREATE", cmd_create },
        { "EXIT" ,  cmd_exit },
        { "LIST", cmd_list },
        { "READ", cmd_read },
        { "DELETE", cmd_delete },
        { "UPDATE", cmd_update }
};


cmd *find_cmd(const char *name) {
    cmd *c;
    for (c = cmds; c->name; c++) {
        if (stricmp(name, c->name) == 0)
            return c;
    }
    return NULL;
}    

請不要那樣

stricmp()

不是拼寫錯誤,它是strcmp的一個不區分大小寫的版本。

我現在有以下問題。 當我調用find_cmd()並傳遞無效的命令時,我的應用程序崩潰了。 我的調試信息顯示如下:

Browsing Command: CREATE
Browsing Command: EXIT
Browsing Command: LIST
Browsing Command: READ
Browsing Command: DELETE
Browsing Command: UPDATE
Browsing Command: �p�
Browsing Command: �(�

之后我得到了段錯誤。 這看起來好像在struct structm中有一些未定義的元素,但它們來自哪里? 我在俯瞰什么? 提前感謝任何指針。

您需要在列表末尾使用“null”元素來觸發for循環中的c->name!= NULL )測試。

更改

cmd cmds[] = {
        { "CREATE", cmd_create },
        { "EXIT" ,  cmd_exit },
        { "LIST", cmd_list },
        { "READ", cmd_read },
        { "DELETE", cmd_delete },
        { "UPDATE", cmd_update }
};

cmd cmds[] = {
        { "CREATE", cmd_create },
        { "EXIT" ,  cmd_exit },
        { "LIST", cmd_list },
        { "READ", cmd_read },
        { "DELETE", cmd_delete },
        { "UPDATE", cmd_update },
        { NULL, NULL }
};

暫無
暫無

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

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