有人知道下面的代码有什么问题吗?

printf("%s%c%c\n","Content-Type:text/html;charset=iso-8859-1",13,10);
printf("<TITLE>VASTAUS</TITLE>\n");
printf("<H3>The Result is!!!</H3>\n");

data = getenv("QUERY_STRING");
sscanf(data, "v=%lf&energiaLuokka=%c[^&]&kaupunki=%s[^&]&vuosi=%s[^&]&kuukausi=%s[^&]&pva=%s", &v, &energiaLuokka, kaupunki, vuosi, kuukausi, pva);
printf("Kuutio: %lf luokka: %c kaupunki: %s vuosi: %s kuukausi: %s paiva: %s", v, energiaLuokka, kaupunki, vuosi, kuukausi, pva);

它被认为是用cgi来获取通过网站表单给出的变量,但目前它只选取2个第一值。。结果输出:Kuutio: 54.000000 luokka: D kaupunki: vuosi: kuukausi: paiva:
如您所见,“kaupunki、vuosi、kuukausi和paiva”变量完全为空。
我还想知道代码是否正确,但问题出在html中。。但至少还没有找到解决的办法
<BR>
<fieldset><legend>Rakennuksen paikkakunta</legend>
<label class="labelcenter" for="kaupunki">Paikkakunta</label>
<select name="kaupunki" id="kaupunki">
<option value="0">Valitse</option>
<option value="Espoo">Espoo</option>
<option value="Forssa">Forssa</option>
</select>
</fieldset>
<BR>

谢谢你的时间!

最佳答案

格式字符串中的所有[^&]可能都不应该存在。它们是不自然的和多余的,并且导致解析失败。
但是,我不得不问,为什么要使用sscanf()来解析查询字符串?如果查询字符串参数以任何不同的顺序出现(并且在任何规范中都没有说明浏览器必须保留表单中参数的顺序),则它将中断。此外,您不会解码百分比编码。
我的建议是使用一个能正常工作的CGI库。

10-08 07:35
查看更多