我有一个包含一堆字符串的文本文件,就我的问题而言并不重要。
这里的代码编译/运行,如果我输入正确的文本文件,第一个 if 语句运行。但是,如果我不执行 else 语句,而是出现 seg 错误,那么在这里标记指针会有什么帮助吗?任何帮助将不胜感激。
#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
(给定参数数量的计数)来确定是否输入了值。就目前而言,在argc
0
时访问argv[1]
将导致分段错误,因为当您在取消引用终止NULL
指针时strcmp
,您正在访问数组的末尾。
您的第一个if
声明应该是:
if(argc > 1 && strcmp(argv[1],"test.txt") == 0) {
...
当你将参数传递给main()时,它们以字符串的形式传递给main()。 argc 是传递给 main() 的参数计数,argv 是参数向量,它总是以 NULL 结尾。 因此,如果您不提供任何参数,则必须首先检查 argc count,然后继续。 另一件事是您无法检查是否传递了错误的文件名或根本没有传递文件名仅在一种条件下
它应该是这样的,
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");
}