我有一个函数,可以根据正在读取的操作进行简单的数学计算。
“操作”字符是从命令行读取的,应为单个字符串。
虽然我在使用strcmp函数时遇到段错误。
不确定为什么会这样。有人可以帮忙吗?下面的代码:
int syscall(int param1, int param2, char operation, int* result)
{
if (param2 == 0 && (strcmp(operation, "/") == 0))
{
return -1;
}
else if (strcmp(operation, "+") == 0)
{
*result = param1 + param2;
return 0;
}
else if (strcmp(operation, "-") == 0)
{
*result = param1 - param2;
return 0;
}
else if (strcmp(operation, "*") == 0)
{
*result = param1 * param2;
return 0;
}
else if (strcmp(operation, "/") == 0)
{
*result = param1 / param2;
return 0;
}
else
{
return -1;
}
}
答案 0 :(得分:3)
strcmp尝试查找字符串的大小,并且char没有任何空终止符,因为它不是字符串。 实际上,您甚至都不将变量的地址提供给strcmp。您只需提供值作为地址,然后strcmp尝试读取0到255之间的某个地址。
您可以使用:
int syscall(int param1, int param2, char operation, int* result)
{
if (param2 == 0 && operation == '/')
{
return -1;
}
else if (operation == '+')
{
*result = param1 + param2;
return 0;
}
else if (operation == '-')
{
*result = param1 - param2;
return 0;
}
else if (operation == '*')
{
*result = param1 * param2;
return 0;
}
else if (operation == '/')
{
*result = param1 / param2;
return 0;
}
else
{
return -1;
}
}
答案 1 :(得分:0)
字符与单个字符串不同。 strcmp需要一个字符串。
在参数中提供字符串应该会有所帮助。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
</head>
<body>
<div id="palette"></div>
</body>
</html>
但是,如果您仅比较字符,则只需比较字符,而忽略strcmp()。