2015-02-10 140 views
-1

我目前有一個函數,它以char數組的形式接受用戶輸入。我試圖通過下面使用的函數解析輸入,以及爲所使用的指針分配內存。然而,我期望從用戶那裏得到的輸入是兩個字符「ab」,後面跟着一個整數。當我嘗試將其轉換爲整數時,程序繼續執行seg故障。我試着分配更多的內存,改變數組的大小,任何幫助將不勝感激!字符串函數返回seg錯誤

int input(char input[10]) 
    { 
     int val; 
     char *firstW,*secondW; 

     firstW = malloc(sizeof(10)); 
     secondW = malloc(sizeof(10)); 

     firstW = strtok(input," "); 
     firstW = strstr(input,"ab"); 
     secondW = strtok(NULL, " "); 

     val = atoi(secondW); 

//When atoi is called, secondW contains any integer for instace "10", but of course as a string type 
//trying to convert string to integer, but returns seg fault 
+0

secondW聲明在哪裏?你打電話給atoi時有什麼? – 2015-02-10 01:08:23

+0

你從不檢查'secondW!= NULL'。 – 2015-02-10 01:13:50

+0

如果'input'源自字符串文字,那可能是問題---'strtok'修改'input'(並且修改字符串文字是未定義的行爲)。在附註中,'firstW'和'secondW'的'malloc'是多餘的---'strtok'返回一個指向(修改)'input'的指針。 – 2015-02-10 01:15:25

回答

0

malloc(sizeof(10))可能是一個錯誤。它不分配10個字節,但它分配足夠的字節來保存int。根據您的計算機的體系結構,這可能是4或8個字節。而當您初始化firstWsecondW時,您需要malloc(10)

+4

當然是一個錯誤。但是代碼實際上從來沒有使用過這個值。指針立即被'strtok' /'strstr'的​​返回值覆蓋 – rici 2015-02-10 01:17:48