打开文件时,简单程序会导致seg错误

时间:2015-03-11 02:40:28

标签: c file printing segmentation-fault arguments

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

这里的代码编译/运行,如果输入正确的文本文件,则运行第一个if语句。但是,如果我没有执行else语句,而是我得到一个seg错误,那么在这里使用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);
    }
}

2 个答案:

答案 0 :(得分:3)

您应该使用argc(给定参数数量的计数)来确定是否输入了值。按照目前的情况,当argv[1]argc时访问0会导致分段错误,因为您正在访问时传递数组末尾 {{1取消引用终止strcmp指针。

您的第一个NULL声明应为:

if

答案 1 :(得分: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");
}