为什么我会收到分段错误 11? [C]

Why am I getting segmentation fault 11? [C]

我是 C 的新手,正在尝试弄清楚为什么我在以下代码中遇到分段错误。我在这里要做的就是检查我的第一个参数是否包含 .txt,无论我是否这样做,程序都会打印出来。

#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。我不确定那是什么意思。谁能帮帮我?

您需要先测试 argc 才能访问 argv

尝试:

#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!");
    }   


}