'Segmentation fault' 因为用户没有输入

'Segmentation fault' as user doesn't has an input

我想实现一个程序,将用户的 DNA 字符串更改为 RNA 字符串。但是我的代码有一些我不太理解的问题。我的代码:

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

int main(int argc, string argv[])

{
    int n = strlen(argv[1]);

    if (argc != 2)
    {
        printf("Usage: ./rna ATGC\n");
        return 1;
    }
    else if (argc == 2 && n >= 4)
    {
        for (int i = 0; i < n; i++)
        {
            if (argv[1][i] == 'A' || argv[1][i] == 'a')
            {
                printf("U");
            }
            else if (argv[1][i] == 'G' || argv[1][i] == 'g')
            {
                printf("C");
            }
            else if (argv[1][i] == 'C' || argv[1][i] == 'c')
            {
                printf("G");
            }
            else if (argv[1][i] == 'T' || argv[1][i] == 't')
            {
                printf("A");
            }
        }
    return 0;
    }
    if (n <= 3)
    {
        printf("Invalid DNA\n");
    }

}

如果用户只是运行程序我想得到这样的输出:

$ ./rna
Usage: ./rna ATGC

但是,我明白了,但无法真正弄清楚哪里出了问题。

$ ./rna
Segmentation fault

您在 访问不存在的元素后检查 argv 的长度 (argc)。在确定 argv[1]!

之前,您不能执行 strlen(argv[1])
int n = strlen(argv[1]);

如果没有命令行参数,它会调用未定义的行为。

更改为:

size_t n = argc > 1 ? strlen(argv[1]) : 0;