2010-06-16 26 views
0

我想編寫一個程序來從命令行接收參數。這就像一種atof()。如何從命令行接收一個參數C

有我的程序有云:

9  char s[] = "3.1415e-4"; 
10  if (argc == 1) { 
11   printf("%e\n",atof(s)); 
12  } 
13  else if (argc == 2) { 
14   //strcpy(s, argv[1]); 
15   printf("%e\n",atof(argv[1])); 
16  } 

1.should我只是使用的argv [1]的字符串傳遞給我的ATOF(),或者,把它變成S []?

2.如果我最好把它放在s []中,是否有一些內置函數可以完成這個工作?也許有些功能像strcpy()?

謝謝。

回答

0

我個人會做這種方式:

#include <stdlib.h> 
#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    const char defaultStr[]="3.1415e-4"; 
    const char *arg = NULL; 
    if(argc <= 1) 
    { 
    arg = defaultStr; 
    } 
    else 
    { 
    arg = argv[1]; 
    } 

    printf("%e\n", atof(arg)); 

    return 0; 
} 
+0

我在代碼中編輯了一個小錯誤 – INS 2010-06-16 12:54:11

0

有沒有必要把它放入s。只需使用argv[1]

說到這,就是你是把它爲S反正(這並不壞),請確保你改變你的代碼:

char s[20]; 
strcpy(s, argv[1]); 

使用strcpy以恆定的字符數組是不是好主意。

0

您可以簡單地將它作爲argv[1]傳遞,無需複製它。如果你想複製它,你需要確保s實際上可以包含argv[1]中包含的完整字符串,如果不是,則分配一個更大的數組......因此它更加混亂。

+0

謝謝,巴勃羅聖克魯斯和彼得Török。 但是讓我困惑的是,參數的類型是char *,如何將參數放入s []? – dennisyuan 2010-06-16 12:47:16

+0

@dennis,'char []'__degrades_在需要時轉換爲'char *'。這意味着在實踐中,兩者的底層存儲器表示實際上是相同的,並且大多數時候可以互換使用這兩種表示法。例外情況是,您不能重新分配數組,即's = argv [1]'會導致編譯錯誤。如果您想複製'argv [1]'的_content_,請使用您提到的'strcpy'。 – 2010-06-16 13:22:06