我必须修改这个需要2个命令行参数的代码
if (argc == 3){
host = argv[1];
port = atoi(argv[2]);
else {
fprintf(stderr, "usage error: incorrect number of arguments\n");
以任意顺序(用户名,服务器主机号,服务器端口号)有3个可选的命令行参数。我这样写,但它不会工作。有人请帮我弄清楚是什么to.thanks
if (argc<1 || argc>4)
fprintf(stderr, "usage error: incorrect number of arguments\n");
else
for(int i=1;i<=argc;i++)
{
if (strcmp( argv[i],"-u"==0 )
username=argv[i];
if(strcmp(argv[i],"-p"==0)
port=atoi(argv[i]);
if (strcmp(avrgv[i],"-h"==0)
host=(argv[i]);
答案 0 :(得分:2)
使用getopt
,它是专门用于以一致的方式处理命令行参数,这是众所周知难以正确执行的。
答案 1 :(得分:0)
您应该增加索引以获取绕过选项的参数值。例如像这样修改你的代码。
if (argc<1 || argc>4)
fprintf(stderr, "usage: %s -u username\n", argv[0]);
else
for(int i=1;i<=argc;i += 2)
{
if (strcmp( argv[i],"-u")==0 )
username=argv[i + 1];
另外,您最好将username
定义为char
数组并将参数值复制到其中,以便您可以直接修改它,如下所示:
char username[NAME_LEN + 1]; // +1 for tailing '\0'
strncpy(username, argv[i + 1], NAME_LEN);