所以,我有一个表单的输入表达式 ......?5 + 8 ......
我需要解析它并评估结果。既然我知道表达式开始之后?以'结尾',我试过了:
int evaluate(char *buffer){
char exp[50];
while(buffer[i] != '+' || buffer[i] != '-' || buffer[i] != '*' || buffer[i] != '/'){
exp[j] = buffer[i];
i++;
j++;
}
exp[j] = '\0';
int number1 = atoi(exp);
char operation = buffer[i];
i++;
j = 0;
while(buffer[i] !=' '){
exp[j] = buffer[i];
i++;
j++;
}
exp[j] = '\0';
int number2 = atoi(exp);
switch(operation)....
}
其中j从0初始化,i初始化为?之后的位置。
使用evaluate(buffer);
调用该函数但是,我不断收到错误Segmentation Fault(core dumped)。
EDIT 这是调试器输出
82 evaluateExp(buffer);
(gdb) next
Program received signal SIGSEGV, Segmentation fault.
0x0000000000401257 in evaluateExp (
buffer=0x603010 "GET /calculate.html?555+777 HTTP/1.1\nHost:localhost\n\n") at webserver.c:108
108 while(buffer[i] != '+' || buffer[i] != '-' || buffer[i] != '*' || buffer[i] != '/'){
(gdb) next
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
任何想法?
答案 0 :(得分:0)
#include <stdio.h>
int evaluate(char *buffer){
char operation[2];
int number1, number2;
sscanf(buffer, "?%d%1[+*/-]%d", &number1, operation, &number2);
switch(operation[0]){
case '+':
return number1 + number2;
case '-':
return number1 - number2;
case '*':
return number1 * number2;
case '/':
return number1 / number2;
}
}
int main(void){
char exp[50];
fgets(exp, sizeof(exp), stdin);
printf("%d\n", evaluate(exp));
return 0;
}