自修改c中的代码

时间:2013-10-05 09:07:05

标签: c self-modifying

有没有办法让代码在每次运行时自行修改。我的意思是添加新功能和修改现有功能。例如,如果我有运行特定功能的交流程序,检查文件是否存在,我可以修改程序,以便在运行时我可以打开另一个文件并永久存储这个新程序。

示例:

void eng_run()
{

    int itr = 0;
    int itr2 = 0;
    int check = 0;
    int conf = 0;
    char arg1[10];
    char arg2[10];
    while(act_arg[itr] != NULL)
    {
        if((strcmp(act_arg[itr],"what") == 0) || (strcmp(act_arg[itr],"how") == 0) || (strcmp(act_arg[itr],"whats") == 0))
        {
            for(itr2 = itr + 1; act_arg[itr2] != NULL ; itr2++)
            {
                if((strcmp(act_arg[itr2],"list") == 0) || (strcmp(act_arg[itr2],"ls") == 0))
                {
                    printf("\E[32mThe \"ls\" system call lists out all the files in the current directory. \n\E[0m");
                    conf++;
                }
}
}
        else if((strcmp(act_arg[itr],"list") == 0) && conf == 0)
        {
            bzero(act_arg,100);
            act_arg[0] = (char *)malloc(sizeof(char) * 100);
            strcat(act_arg[0],"ls");
            check++;
        }
}
}

在上面的函数中,act_arg预先解析了命令lline参数。现在,这个功能可以回答如下问题:

列表有什么作用?       (要么) 列出所有文件

现在我希望它在执行期间修改自己,如果用户希望通过添加类似处理cp命令的方式来修改它。意思是接受:

cp做什么?       (要么) 将fileone复制到filetwo

将副本用作关键字。

1 个答案:

答案 0 :(得分:1)

您可以实现可扩展的命令列表,而无需进入自修改代码。最简单的方法是将扩展名放在程序启动时读入的数据文件中。当用户输入时,程序可以将新条目附加到该数据文件的末尾。