'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;
我想实现一个程序,将用户的 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;