2012-11-25 52 views
1

每次我嘗試使用strtok()我得到一個分段錯誤。不知道爲什麼 - 我是新來的C.strtok()在c - 分段錯誤

這裏是我的代碼:

#include "shellutils.h" 
#include <stdio.h> 
#include <unistd.h> 

int main(int argc, char **argv) 
{ 
    char input[150]; 

    while(1) { 
     prompt(); 
     fgets(input, 150, stdin); 

     char *fst_tkn = strtok(input, " "); 

     printf("%s", fst_tkn); 


     if(feof(stdin) != 0 || input == NULL) { 
      printf("Auf Bald!\n"); 
      exit(3); 
     } 
    } 
} 

感謝您的幫助!

+4

您應該檢查是否'fst_tkn'不是'NULL'甚至在第一次調用'strtok'後。 –

+0

btw,返回'EXIT_FAILURE'而不是任意值,它在'stdlib.h'中聲明。 – effeffe

+0

此編碼是否正確?你應該'#include '正確地選擇strtok,至少在Linux上。當行是'strtok(input,'');'(注意單引號)時,我可以得到一個類似的seg錯誤,但它對我來說可以像上面輸入的那樣工作。 – Joe

回答

1

至於代碼:

char *fst_tkn = strtok(input, " "); 
printf("%s", fst_tkn); 

如果您input變量爲空,或者只包含空格,然後fst_tkn將被設置爲NULL。然後,當您嘗試將其打印爲字符串時,所有投注都將關閉。

你可以看到,在下面的代碼通過調整值土特產品給input

#include <stdio.h> 
#include <string.h> 
int main (void) { 
    char input[] = ""; 
    char *fst_tkn = strtok (input, " "); 
    printf ("fst_tkn is %s\n", (fst_tkn == NULL) ? "<<null>>" : fst_tkn); 
    return 0; 
}