【发布时间】:2020-11-14 22:33:31
【问题描述】:
在我的程序中,我得到了我控制的错误,但是当我试图避免这些预设错误并输入我希望用户输入的内容时,它会返回一个分段错误。
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, string argv[])
{
string key = argv[1];
if (argc < 2 || argc > 2)
{
printf("Usage: ./substitution key\n");
exit(1);
}
if (argc == 2 && strlen(key) < 26)
{
printf("Key must contain 26 characters.\n");
exit(1);
}
if (strlen(key) > 26)
{
printf("Key must contain 26 characters.\n");
exit(1);
}
for (int i = 0; i < 26; i++)
{
if (isalpha(key) == 0)
{
printf("MAKE SURE YOUR KEY ONLY HAS LETTERS\n");
}
}
printf("test");
}
【问题讨论】:
-
您应该在使用它们之前检查正确数量的命令行参数。这也是错误的:
if (isalpha(key) == 0)应该是if (isalpha(key[i]) == 0)。在您已经确定是argc == 2之后,您不需要检查它,如果您可以计算一次长度并检查它是否为!=26 以减少重复代码。同样if (argc != 2)对我来说似乎更清楚。 -
顺便说一句,gdb 是个好朋友。
g++ -g <filename>.c然后使用gdb --args ./a.out <arguments>。现在输入r。如果崩溃,bt进行回溯。当然还要学习其他的东西,比如断点b <line number>和单步执行n或单步执行s,这会让你的生活变得非常轻松
标签: c segmentation-fault cs50