Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 由于缺少命令行参数而导致分段错误(argv[1])_C_Cs50_Caesar Cipher - Fatal编程技术网

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

C 由于缺少命令行参数而导致分段错误(argv[1]),c,cs50,caesar-cipher,C,Cs50,Caesar Cipher,这段代码用于检查用户是否只输入了一个数字命令行参数,如果不是,则返回错误代码“1”。我对代码进行了设置,以便它首先检查argc是否不是2。不幸的是,如果没有输入任何命令行参数,我仍然会收到分段错误,并且我不确定为什么这段代码没有捕获空数量的命令行参数 我尝试将“if(argc!=2)”公式移动到整个“for”语句上方,以尝试从一开始就捕获命令行参数问题,但收到了相同的结果 我的问题是,为什么我在没有提供命令行参数的情况下收到分段错误,我缺少什么来确保程序在没有命令行参数的情况下不会分段错误 由于

这段代码用于检查用户是否只输入了一个数字命令行参数,如果不是,则返回错误代码“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 key\n");
            return 1;
        }
    }
// add'l code //
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符串argv[])
{
//添加变量//
int k=atoi(argv[1]);
对于(int i=0;i

在使用
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] != '\0') {
        printf("Usage: ./caesar key\n");
        return 1;
    }

    return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
int i=0;
如果(argc!=2){
printf(“请只输入1个命令行参数。\n”);
返回1;
}
while(isdigit(argv[1][i]))
++一,;
如果(argv[1][i]!='\0'){
printf(“用法:./caesar key\n”);
返回1;
}
返回0;
}

问题出现在第
int k=atoi(argv[1])行中。
请在此之前执行
argc
检查。您收到分段错误,因为您试图访问不存在的内容。您至少提供了一个命令行参数(可执行),尽管您的代码至少需要2个才能运行。