简单的程序在打开文件时导致段错误

Simple program leads to seg fault when opening a file

我有一个包含一堆字符串的文本文件,对我的问题而言并不重要。

这里的代码 compiles/runs,如果我输入正确的文本文件,第一个 if 语句就会运行。但是,如果我不这样做,则 else 语句不会执行,而是出现段错误,Mallocing 指针在这里会有帮助吗?任何帮助将不胜感激。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

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

    FILE * ptr;

    if(strcmp(argv[1],"test.txt") == 0)
    {
        printf("Right text file was inputted");
    }
   //but if I wan't the alternative (if the user didn't enter the right thing

    else
    {
     // this never executes, but instead the program just seg faults if the first if statement is not true
     printf("You didn't enter the right textfile, or none at all");
     exit(1);
    }
}

您应该使用 argc(给定参数的计数)来确定是否输入了值。就目前而言,当 argc0 时访问 argv[1] 将导致分段错误 因为您正在访问数组的末尾 strcmp 取消引用终止 NULL 指针。

您的第一个 if 语句应该是:

if(argc > 1 && strcmp(argv[1],"test.txt") == 0) {
...

当您将参数传递给 main() 时,它们以字符串的形式传递给 main()。 argc 是传递给 main() 的参数的计数,argv 是始终以 NULL 结尾的参数向量。因此,如果您不提供任何参数,则必须先检查 argc 计数,然后再继续。另一件事是你不能检查是否传递了错误的文件名或者在一种情况下根本没有传递文件名

应该是,

int main (int argc, char * argv[])
{
    FILE * ptr;
    if(argc>1)
    {
        if(strcmp(argv[1],"test.txt") == 0)
        {
            printf("Right text file was inputted");
        }
        else
        {
            printf("You didn't enter the right textfile");
            exit(1);
        }
    }
    else
        printf("you havn't entered any file name");
}