当我打印查询时,我得到:
一个= 1&安培;二= 2及3 = 3及4 = 3及5 = 3及6 = 3
还是不行!!!!我快要疯了。
#include <stdio.h>
#include <stdlib.h>
int main(void){
char *data;
float prices[] = {1, 2, 3, 4, 5, 6};
int a, b, c, d, e, f;
printf("%s%c%c\n",
"Content-Type:text/html;charset=iso-8859-1",13,10);
printf("<title>Bill</title>\n");
printf("<h3 align=center >Bill</h3>\n");
data = getenv("QUERY_STRING");
if(data == NULL){
printf("<p>Error!</p>");
} else {
printf("%s", data);
sscanf(data, "one=%d&two=%d&three=%d&four=%d&five=%d&six=%d", &a, &b, &c, &d, &e, &f);
}
return 0;
}
答案 0 :(得分:1)
是否有一种简单且不易出错的方式来处理这个问题?
是;存在各种C库,例如cgic和C CGI,它们处理像这样的常见CGI任务。 (如果这些都不符合您的口味,请尝试Googling "C CGI library"获取其他选项。)
答案 1 :(得分:0)
解析此字符串的一种简单方法是使用sscanf
。对于这个例子:
one=2&two=1
你可以使用:
int one, two;
sscanf(data, "one=%d&two=%d", &one, &two);
有关sscanf的更多信息,请访问:http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/
答案 2 :(得分:0)
你没有解析任何东西,所以你期望得到什么价值? (就像其他人说的那样,最简单的方法是使用sscanf
。请注意,只有当你知道参数的名称和顺序时才能使用它,并且你应该在那之后手动转换字符。)
您的代码有一些不好的东西,例如if (data==NULL) ... printf("%s",data)
(如果data
可能为NULL,为什么要打印它),并使用quantities
而不为其分配空间。