[英]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.