分段错误与strcmp

时间:2019-01-26 21:31:59

标签: c segmentation-fault

我有一个函数,可以根据正在读取的操作进行简单的数学计算。

“操作”字符是从命令行读取的,应为单个字符串。

虽然我在使用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; 
    }
}

2 个答案:

答案 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()。