【发布时间】:2020-05-13 21:07:22
【问题描述】:
当我刚刚运行 ./caesar 命令时,我在此程序中收到 Segmentation fault 错误。我发现当我在代码的开头写 int length=strlen(argv[1]); 时会打印错误,当我将这一行放在(for循环)之前时它工作正常,但我不明白为什么它在那里工作得很好,而不是在程序的顶部??
非常感谢您的帮助!提前致谢。
int main(int argc,string argv[])
{
int s=0;
int length=strlen(argv[1]); ##GETS ERROR
if ( argc !=2)
{
printf("Usage:./caesar key\n");
return 1;
}
else
{
int length=strlen(argv[1]); ##WORKS FINE
for (int i = 0; i < length ; i += 1)
{
int c= argv[1][i];
if (isdigit(c))
{
s += 1;
}
else
{
s+=0;
}
}
printf("%i\n",s);
if (length==s)
{
int key = atoi(argv[1]);
printf("int:%i\n",key);
}
else
{
printf("Usage:./caesar key\n");
}
}
}
【问题讨论】:
-
您用来运行它的命令行是什么?
argv[1]至少需要一个命令行参数,因此在argc检查确保它存在之前,您不应访问它。 -
int length=strlen(argv[1]); ##GETS ERROR因为你没有将任何参数传递给程序,第二个strlen在你传递一个参数时工作正常,否则它不会被调用。请注意,您不需要第二个分支 (else),因为您来自if子句的return 1。