2012-12-10 66 views
0

使用C:賦值給char ...期望轉換嗎?

int main(int argc, char *argv[]) 

{ 
    double number1, number2; 
    char operator; 

    number1 =atof (argv[0]); 
    operator =argv[1];  // line 29 
    number2 =atof (argv[2]); 

編譯器抱怨說

29警告:賦值時將指針整數,未作鑄 [默認啓用]

+0

由於沒有人說過:'argv [0]'通常是可執行文件的名稱[可能是其他的東西,你可以調用'exec'家族的成員傳遞任何'argv [0]']你想從'argv [1]'開始的命令行參數。 –

回答

3

argv [1]是一個指向char的指針,你不能將它指定給char。要麼將運算符轉換爲char *,要麼嘗試運算符= *(argv [1]);

2
operator =argv[1];  // line 29 

這裏,argv[1]是鍵入char*。但是operatorchar。這是錯誤的原因。

如果你想只有你從此傳遞命令行中,單個字符操作:

operator=argv[1][0]; 

會做。

請注意,最好使用strto*進行轉換,因爲ato*函數不檢測錯誤。

+0

爲什麼會operator = argv [1] [0];工作? – Stumbler

+1

@Duncan這是'argv [1]'中的第一個字符。例如,如果您在命令行中將'+'作爲'argv [1]''傳入'',那麼它就是''+「'。所以當你做'argv [1] [0]'時,它是'argv [1]'中的第一個字符,在這裏是'+'。 –

2

變量operator的類型爲char,而argv[1]的類型爲char *

一個是單個字符,另一個是指向字符的指針(即字符串)。

PS。即使它僅在使用純C時才起作用,您應該避免使用C++關鍵字(如operator),因爲這會使它難以移植到C++。