2015-01-26 187 views
0

我想寫一個程序,需要一個字符串作爲命令行參數,然後通過一個函數(str_to_int),需要一個字符串作爲輸入運行所述參數。然而,當我試圖編譯程序,我得到一個警告說C:命令行參數與字符串

initializing 'char *' with an expression of type 'int' [-Wint 
conversion] 
    char* str = atoi(argv[1]); 
    ^ ~~~~~~~~~~~~~ 

當我運行該程序,我得到一個分段錯誤 我測試過的str_to_int了很多,所以我敢肯定的是,問題在於命令行程序。這是它的代碼。

#include "hw3.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(int argc, char *argv[]) 
{ 
    char* str = atoi(argv[1]); 
    printf("%d\n", str_to_int(str)); 
    return 0; 
} 

誰能告訴我什麼,我做錯了什麼?謝謝。

+0

'atoi'返回'int'。 – 2015-01-26 19:38:24

+1

你的代碼需要一個字符串('argv [1]'),將它轉換爲一個'int'('atoi()'),並將結果放入一個字符串('char *')中,然後將其轉換爲'int'('str_to_int()')。這裏的目標是什麼?! – Biffen 2015-01-26 19:39:33

+0

remyabel和Biffen(和編譯器:-))是正確的。 – 2015-01-26 19:41:16

回答

0

這就是你所需要的一切,儘管如果你省略命令行參數它會崩潰。

{ 
    printf("%d\n", str_to_int(argv[1])); 
    return 0; 
} 

這是更強大的:

int main(int argc, char *argv[]) 
{ 
    if (argc == 1) 
     printf("missing parameter."); 
    else 
     printf("%d\n", str_to_int(argv[1])); 

    return 0; 
} 
+0

第一個不一定會崩潰,依賴於'str_to_int',如果接受空指針作爲有效參數,或者不接受。 – hyde 2015-01-26 20:11:32

0
#include "hw3.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int main(int argc, char *argv[]) 
{ 
    char* str = argv[1]; 
    printf("%d\n", str_to_int(str)); 
    return 0; 
} 
0

只是刪除atoi函數調用,它應該工作