问题描述
我有这段代码应该检查“ key”(即argv(1))是否有效。 “分段错误”
这里是:
string plain; //this is in advance for my for loop
//was unable to find a way to actually get the thing to handle a non-numeric key :(
int main(int argc,string argv[])
{
if (argc == 2 && isdigit(argv[1]))
{
plain = get_string("plaintext:");
printf("ciphertext:");
}
else
{
printf("Usage : ./caesar key\n");
return 1;
}
感谢您的帮助,如果您需要更多详细信息,请询问!
解决方法
让我首先提到您的所有问题都是由CS-50引起的,CS-50是一种可怕的,有害的类,它将使您成为不良的C程序员。
实际上,argv
的格式为char* argv[]
,即字符指针数组。通过执行isdigit(argv[1])
,您将char*
传递给函数,而不是期望的字符。在这里,标准的C编译器会抱怨“期望的字符,得到了指针”,因为代码无效。
如果目的是检查字符串的第一位,则应该完成isdigit(argv[1][0])
。另请注意,isdigit
位于ctype.h
中,因此您必须包括该标头。如果要检查字符串中的所有字符是否都是数字,则需要循环。
argv[1]
的类型为char *
,而函数isdigit
的类型为char
。所以这个if语句
if (argc == 2 && isdigit(argv[1]))
不正确。
您要么需要编写一个单独的函数来检查表达式argv[1]
所指向的字符串中的每个字符都代表一个数字。或者,您可以使用标准函数strtol
并检查该函数执行的字符串到整数的转换是否成功。