C语言 由于缺少命令行参数导致的分段错误(argv[1])



这段代码用于检查用户是否只输入了一个数字命令行参数,并返回一个错误代码"1"如果不是这样的话。我设置了代码,以便它首先检查argc是否为2以外的任何值。不幸的是,如果没有输入命令行参数,我仍然收到分段错误,我不确定为什么这段代码没有捕获命令行参数的空量。

我试着移动"if (argc !=2)"公式上面的整个"for";语句试图从一开始就捕获命令行参数问题,但我收到了相同的结果。

我的问题是,当没有提供命令行参数时,为什么我会收到分段错误,以及我缺少什么以确保程序不会在没有命令行参数的情况下出现分段错误?

由于课程政策,我将只提供有问题的代码段。

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

int main(int argc, string argv[])
{
// add'l variables //
int k = atoi(argv[1]);
for (int i = 0; i < strlen(argv[1]); i++)
{
if (argc != 2)
{
printf("Please enter only 1 command-line argument.n");
return 1;
}
else if (!isdigit(argv[1][i]))
{
printf("Usage: ./caesar keyn");
return 1;
}
}
// add'l code //

终端

显示错误

在使用argv[1]之前必须先检查argc,因为如果argc < 2,argv[1]可能没有有效的指针。修改后的代码可能是这样的:

#include <stdio.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
int i = 0;
if (argc != 2) {
printf("Please enter only 1 command-line argument.n");
return 1;
}
while (isdigit(argv[1][i]))
++i;
if (argv[1][i] != '') {
printf("Usage: ./caesar keyn");
return 1;
}
return 0;
}

最新更新