2016-06-14 85 views
-1

我是C新手,想弄清楚爲什麼我在下面的代碼中遇到了分段錯誤。我想在這裏做的是檢查我的第一個參數是否包含.txt,並且無論我是否執行該程序都會打印。爲什麼我得到分段錯誤11? [C]

#include <stdio.h> 

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


    char filename = argv[1]; 
    char *txt_filename = filename; 
    char *check_txt = ".txt"; 

    char *txtvalid = strstr(txt_filename, check_txt); 

    if (txtvalid) { 

     printf("You have entered a correct text file!"); 

    } 
    else { 

     printf("You have entered an incorrect text file!"); 
    } 


} 

當我運行此代碼時,出現分段錯誤11.我不確定這是什麼意思。誰能幫我嗎?

+3

'炭文件名= argv的[1];' - >'的char *文件名= argv的[1];' – kaylum

+3

您應該在編譯時加上警告。例如如果您使用'gcc',請使用'gcc -Wall source.c'。 (我可能會添加'-Werror')它會顯示'char'分配給'char *'的警告,反之亦然。 – anishsane

+0

你是否傳遞命令行參數。我認爲你需要爲txtvalid分配內存 –

回答

1

需要訪問argv

嘗試之前測試argc

#include <stdio.h> 

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

    // Check for argument 
    if (argc <= 1) 
    { 
     printf("Missing argument\n"); 
     return 0; 
    } 

    char *filename = argv[1];  // Notice this change, i.e. *filename 
    char *txt_filename = filename; 
    char *check_txt = ".txt"; 

    char *txtvalid = strstr(txt_filename, check_txt); 

    if (txtvalid) { 

     printf("You have entered a correct text file!"); 

    } 
    else { 

     printf("You have entered an incorrect text file!"); 
    } 


} 
+0

虐待這個嘗試 – Mr10k

+0

我可以證實這對我有效,是的,我沒有意識到我不得不分配文件名作爲指針。謝謝您的幫助! – Mr10k