2016-06-14 50 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