检查 ARGV 值时 C++ 未处理的异常
C++ unhandled Exception while checking ARGV values
有人能告诉我为什么这段代码在 10 分钟前有效但现在一直失败吗?
我一直收到未处理的异常错误。在调试菜单中,我输入 32 和 12.5。
每次我尝试检查 i > 0 时,代码都会失败;
bool CheckArgInputs(char* inputs[], int numInputs)
{
const char validChars[] = ".,+-eE0123456789";
bool tester = false;
for (int i = 0; *inputs[i] != 0; i++)
{
tester = false;
for (int j = 0; j < sizeof(validChars); j++)
{
if (*inputs[i] == validChars[j])
{
tester = true;
}
}
if (tester == false)
return false;
//else
// cout << "Good Input" << endl;
}
}
int main(int argc, char* argv[])
{
bool validInput = true;
for (int i = 1; i < argc; i++)
{
validInput = CheckArgInputs(&argv[i], argc);
if (validInput == false)
{
cout << "X" << endl;
return 0;
}
}
return 0;
}
你的 CheckArgInputs()
函数被编码为像被赋予一个指向单个字符串的指针一样,但 main()
实际上是给它一个指向字符串指针的指针。然后该函数没有正确编码以迭代该字符串的各个字符,它实际上是在 argv[]
数组中一次迭代一个字符串,直到它超出数组的范围。
如果输入字符串有效,您实际上也不会 return
从 CheckArgInputs()
获取任何内容。
试试这个:
bool CheckArgInput(const char* input)
{
const char validChars[] = ".,+-eE0123456789";
for (int i = 0; input[i] != 0; i++)
{
for (int j = 0; j < sizeof(validChars)-1; j++)
{
if (input[i] != validChars[j])
{
return false;
}
}
}
return true;
}
int main(int argc, char* argv[])
{
bool validInput = true;
for (int i = 1; i < argc; i++)
{
validInput = CheckArgInput(argv[i]);
if (!validInput)
{
cout << "X" << endl;
return 0;
}
}
return 0;
}
有人能告诉我为什么这段代码在 10 分钟前有效但现在一直失败吗?
我一直收到未处理的异常错误。在调试菜单中,我输入 32 和 12.5。
每次我尝试检查 i > 0 时,代码都会失败;
bool CheckArgInputs(char* inputs[], int numInputs)
{
const char validChars[] = ".,+-eE0123456789";
bool tester = false;
for (int i = 0; *inputs[i] != 0; i++)
{
tester = false;
for (int j = 0; j < sizeof(validChars); j++)
{
if (*inputs[i] == validChars[j])
{
tester = true;
}
}
if (tester == false)
return false;
//else
// cout << "Good Input" << endl;
}
}
int main(int argc, char* argv[])
{
bool validInput = true;
for (int i = 1; i < argc; i++)
{
validInput = CheckArgInputs(&argv[i], argc);
if (validInput == false)
{
cout << "X" << endl;
return 0;
}
}
return 0;
}
你的 CheckArgInputs()
函数被编码为像被赋予一个指向单个字符串的指针一样,但 main()
实际上是给它一个指向字符串指针的指针。然后该函数没有正确编码以迭代该字符串的各个字符,它实际上是在 argv[]
数组中一次迭代一个字符串,直到它超出数组的范围。
如果输入字符串有效,您实际上也不会 return
从 CheckArgInputs()
获取任何内容。
试试这个:
bool CheckArgInput(const char* input)
{
const char validChars[] = ".,+-eE0123456789";
for (int i = 0; input[i] != 0; i++)
{
for (int j = 0; j < sizeof(validChars)-1; j++)
{
if (input[i] != validChars[j])
{
return false;
}
}
}
return true;
}
int main(int argc, char* argv[])
{
bool validInput = true;
for (int i = 1; i < argc; i++)
{
validInput = CheckArgInput(argv[i]);
if (!validInput)
{
cout << "X" << endl;
return 0;
}
}
return 0;
}