[英]optional command line arguments for client program in c++
我必須修改此代碼,需要2個命令行參數
if (argc == 3){
host = argv[1];
port = atoi(argv[2]);
else {
fprintf(stderr, "usage error: incorrect number of arguments\n");
以任意順序具有3個可選的命令行參數(用戶名,服務器主機號,服務器端口號)。我以這種方式編寫,但無法正常工作。請有人幫我弄清楚該怎么做。謝謝
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]);
使用getopt
,它專門用於以一致的方式處理命令行參數,這是很難正確完成的。
您應該增加索引以繞過選項獲得參數的值。 例如,像這樣修改您的代碼。
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.