C 分段故障(堆芯转储)-简单
我是C语言的初学者。我有一个简单的程序,我想把每个关键字都变成一个对应的数字。例如,A=0、B=1和F=5等。在这种情况下,关键字“hello”将是“7 4 11 14”。 我可以编译这段代码,但每当我运行这段代码时,就会出现错误“Segmentation fault(core dumped)”。我尝试了几件事来改变它,但都没有成功。有人能检查我的代码并给我反馈吗?欢迎对我的风格、逻辑和其他与代码相关的东西提出任何建设性的反馈C 分段故障(堆芯转储)-简单,c,cs50,C,Cs50,我是C语言的初学者。我有一个简单的程序,我想把每个关键字都变成一个对应的数字。例如,A=0、B=1和F=5等。在这种情况下,关键字“hello”将是“7 4 11 14”。 我可以编译这段代码,但每当我运行这段代码时,就会出现错误“Segmentation fault(core dumped)”。我尝试了几件事来改变它,但都没有成功。有人能检查我的代码并给我反馈吗?欢迎对我的风格、逻辑和其他与代码相关的东西提出任何建设性的反馈 #include <cs50.h> #include &
#include <cs50.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main(int argc, string argv[])
{
int keylength = strlen(argv[1]);
char *key = argv[1];
// insert keyword
if (argc != 2)
{
printf("Less commands please.");
return 1;
}
else
{
if (!isalpha(argv[1]))
{
printf("Please no numbers or weird symbols");
}
else
{
for (int i = 0; i < keylength; i++)
{
if(isupper(key[i]))
{
key[i] = key[i] - 65;
}
else if(islower(key[i]))
{
key[i] = key[i] - 97;
}
}
}
}
}
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符串argv[])
{
int keylength=strlen(argv[1]);
char*key=argv[1];
//插入关键字
如果(argc!=2)
{
printf(“请减少命令”);
返回1;
}
其他的
{
if(!isalpha(argv[1]))
{
printf(“请不要使用数字或奇怪的符号”);
}
其他的
{
for(int i=0;i
isalpha
接受字符作为输入,而不是像您所做的那样接受指向字符(或字符串)的指针。您需要在字符串中循环并逐个检查每个字符。但我不确定这是否会导致故障
另一个可能的问题是:当你运行程序时,你是在用一个参数运行它吗
如果不是,则int keylength=strlen(argv[1])由于argv[1]
不存在,code>将导致SEGVULT。在检查参数的数量后,您应该将其放入else
子句中。您可以像这样做
#include <ctype.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("Must provide one argument\n");
return 1;
}
int keylength = strlen(argv[1]);
int i = 0;
for( ; i <keylength; i++)
{
if (!isalpha(argv[1][i]))
{
printf("not alpha\n");
return 1;
}
}
char *key = argv[1];
printf("b4 %s\n", argv[1]);
for (int i = 0; i < keylength; i++)
{
if(isupper(key[i]))
key[i] = key[i] - 65;
else if(islower(key[i]))
key[i] = key[i] - 97;
}
printf("after %s\n", argv[1]);
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
如果(argc!=2)
{
printf(“必须提供一个参数\n”);
返回1;
}
int keylength=strlen(argv[1]);
int i=0;
因为(;iargv[1]
是一个指向char
的指针,所以我很惊讶编译器没有对你大喊大叫,例如isalpha(argv[1])
。至于崩溃,在调试器中运行以找到它。哦,在你知道它有效之前取消引用指针很可能会导致(例如:你使用argv[1]<代码> >之前,检查是否有一个<代码> ARGV(1)< /代码>。什么是<代码>字符串< /C>?定义为(可能是<代码> C550./<代码>中的TyBueF)?作为对你的指导者的FYI,这可能是一个坏名字,用作TyPulf,因为<代码> String 实际上是C++中的关键字,并且可能会引起更多的混乱而不是帮助。(特别是因为它可能是char*
的typedef;只需使用char*
,实际上就不会那么混乱了)。谢谢!这真的很有帮助!没问题。如果这是您想要的答案,请随意接受。