我有一个函数,可以根据我们正在读取的操作进行简单的数学计算。
"操作"字符是从命令行中读取的,并且应该是单个字符串。
不过,当我使用 strcmp 函数时,我遇到了一个 seg 错误。
不知道为什么会这样。有人可以帮忙吗?代码如下:
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;
}
}
strcmp 试图查找字符串和字符的大小没有任何空终止符,因为它不是字符串。实际上,您甚至没有向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;
}
}
char 与
单个字符串不同。 strcmp 需要一个字符串。
在参数中提供字符串应该会有所帮助。
int syscall(int param1, int param2, char operation[], int* result)
{ /* rest of code */
但是如果你只是比较字符,只需比较字符而忘记strcmp()。