在windows上构建netcat,在源代码中编辑argv参数

在windows上构建netcat,在源代码中编辑argv参数,c,windows,main,netcat,C,Windows,Main,Netcat,我想更改windows上netcat应用程序的源代码。 目标是在源代码中声明参数并构建它,所以我只需要启动程序 它正在发挥作用 源代码的第一行如下所示: main (argc, argv) int argc; char ** argv; 我想像这样改变它 argv = "commandline arguments": 我已经尝试了(很长时间)不同的解决方案 但它不起作用 我想我需要一个带指针的解决方案。。。但是我当然不确定。argv包含一个指向字符串本身的指针数组: char *my_arg

我想更改windows上netcat应用程序的源代码。 目标是在源代码中声明参数并构建它,所以我只需要启动程序 它正在发挥作用

源代码的第一行如下所示:

main (argc, argv)
int argc;
char ** argv;
我想像这样改变它

argv = "commandline arguments":
我已经尝试了(很长时间)不同的解决方案 但它不起作用
我想我需要一个带指针的解决方案。。。但是我当然不确定。

argv
包含一个指向字符串本身的指针数组:

char *my_argv[] = {
    "arg 0",
    "arg 1",
    "arg 2",
    "...",
    "arg N",
    NULL
};

int my_argc = N;
从那里,通常最容易将现有的
main
重命名为其他名称,然后创建一个新的
main
,调用重命名版本:

int main(){ 
    // argv & argc from above

    return renamed_main(my_argc, my_argv);
}

您需要创建指向可变字符串的指针数组,以
NULL
结尾。还要记住,
argv[0]
表示程序名,而不是提供的参数。例如,如果您希望netcat的行为就像是通过命令
nc-l-p80
调用它一样,您可以执行以下操作:

char arg0[] = "nc";
char arg1[] = "-l";
char arg2[] = "-p";
char arg3[] = "80";
char *fixed_argv[] = { arg0, arg1, arg2, arg3, NULL };

argc = 4;
argv = fixed_argv;

那么,你是说你不想在命令行上传递参数,而是为程序内部的默认设置C或C++?选择一个…请不要使用K&R风格的函数定义…
argv
应该是
NULL
终止的,字符串本身必须是可变的(因此字符串文字不合适)。@caf:是的,启动代码就是这样做的。除非原始的
main
是真正疯狂的,否则两者都不是真正需要的。添加空终止符也很容易,但如果您真的不需要它,那么让字符串可变是愚蠢的(在这种情况下,如前所述,现有的代码真的很疯狂,应该重写)。很容易想象命令行参数都不区分大小写的代码,因此,将参数字符串转换为小写,以便使用
strcmp()
来比较它们…@caf:我可以想象各种各样的疯狂——但它仍然是疯狂的,毫无疑问。非常感谢,它是有效的!我发现这不是问题所在,我以前有一个解决方案,但我想使用-e选项,它没有包含在源代码中,但在exe文件中,它是,所以它无法工作。