CS50习题集2:替换-分段故障(核心转储)- if(strlen(key)== 0)

9jyewag0  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(169)

为什么我得到Segmentation fault (core dumped)作为终端输出?这是由第二个if语句引起的。

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main(int argc, string argv[])
{
    string key = argv[1];

    if (strlen(key) != 26)
    {
        printf("Key must contain 26 characters.\n");
        return -1;
    }

    if (strlen(key) == 0)
    {
        printf("Usage: ./substitution key\n");
        return 1;
    }
}
jecbmhm3

jecbmhm31#

就像注解中说的,你需要首先验证是否有第二个参数,否则它就不起作用了,为了验证这一点,你可以使用argc变量,它存储args的数量。
于是你的if就变成了这样:

if (argc != 2) // verify arg quantity
{
    printf("Usage: ./substitution key\n");
    return 1;
}
else if (strlen(argv[1]) != 26) // verify arg size
{
    printf("Key must contain 26 characters.\n");
    return 1;
}

还要记住,您需要返回1而不是-1

相关问题