有人知道以下代码有什么问题吗?
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>
谢谢你的时间!
答案 0 :(得分:0)
格式字符串中的所有[^&]
可能都不应该存在。它们不自然且多余,它们导致解析失败。
但是,我不得不问,为什么要使用sscanf()
来解析查询字符串呢?如果查询字符串参数以任何不同的顺序出现,它将会中断(并且任何规范中都没有说明浏览器必须保留表单中参数的顺序)。此外,您不会解码百分比编码。
我的建议是使用正确完成工作的CGI库。