2012-10-14 98 views
3

我遇到了返回值爲atoi()的問題。atoi(argv [1])的返回值始終是0

我想將命令行參數argv[1]中的char轉換成int類型並打印出來。

這是我的代碼。

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

int main(int argc, char *argv[]) 
{ 
    int i; 
    //print the char in *argv[] 
    for(i = 0; i < argc; i++) 
    { 
      fprintf(stdout, "Arg %d: %s\n", i, argv[i]); 
    } 

    if (argc > 1) 
    { 
     i = atoi(argv[1]);  //convert char to int 
     fprintf(stdout, "Int version of 1st arg: %d\n", i); 
    } 

    return 0; 
} 

我用GCC編譯並運行它像./a.out a b c

其他結果是正確的,但atoi()結果總是顯示爲

Int version of 1st arg: 0 

你能給我一些關於這個論題的建議?

+0

你是否特別給./a.out a b c?或者你給數字如./a.out 10 20 30 –

回答

5

我的建議是,如果要將字符串轉換爲int,請提供參數作爲參數,實際上可以將其轉換爲int。你的論點是:

./a.out a b c 

所以沒有整數。你期望什麼?你認爲a轉換爲int是什麼?

+0

我的意思是將字符類型'a'轉換爲它的十進制值97.所以我期望輸出的是第一個arg的Int版本:97 –

+3

@Takumar你讀過了嗎?事先提供'atoi'的文檔? –

+0

@Takumar,然後你需要把個體角色轉換成一個整數。請記住,它並不一定是97. – chris

2

atoi()將char字符串轉換爲數字 - 但僅限字符串是數字。

如果要打印'a'作爲ASCII值,只需使用%dargv[1][0]即字符串argv[1]的第一個字符。

+0

正是如此,感謝您的回答。 –

1

atoi無法發出轉換錯誤信號,例如試圖解析a時。使用strtol代替,它給你足夠的信息來確定轉換是否成功:

#include <stdlib.h> 

char const * input = "abc"; // this could be argv[i] 

char * e; 

long int n = strtol(input, &e, 0); 

if (*e != '\0') { /* conversion error! */ } 
else   { /* n is valid  */ }