C中的字符串操作,<optimized out =“”>错误

时间:2015-12-18 15:17:16

标签: c string webserver cs50

我正在解决cs50x pset6 Webserver问题,如果有人能帮助我,我将非常感激。 任何人都可以解释下面在gdb中发生的事情(也在源代码本身中)吗?

Optimized out and Gone String Variable

问题是在这个问题集中需要操作字符串变量,但不知何故,每当新变量出现时,我都会丢失它们。

我尝试按照某些来源的建议进行不同的编译,例如: https://cs50.stackexchange.com/questions/9033/variable-optimized-out-eventhough-it-will-be-used-later

但即使我尝试了其他解决方案,也没有任何改变。

所以,如果你能帮助我解决这个问题,我将不胜感激。

这是我的源代码(第151-391行):http://codepaste.net/2uipag

编辑:此错误不仅影响调试模式,而且程序本身也没有给出预期的结果。基本上是:

  • Line =&#34; GET /cat.html HTTP / 1.1&#34;
  • absolute_path =&#34; /cat.html" (使用strncpy()提取)
  • 根=&#34; /家庭/ jharvard / pset6 /公共&#34;
  • path = root以及absolute_path(strcat())

因为绝对路径被优化而不是获得&#34; home / jharvard / pset6 / public / cat.html&#34;对于路径变量,我得到&#34; home / jharvard / pset6 / public&#34;

我为不清楚而道歉,并感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

很难说任何特异性发生了什么,但最有可能的是,在函数最后一次使用line指针后的某个时刻,程序的优化版本重新使用其存储空间别的。如果变量仍然在那个范围内,那么原则上你仍然可以检查它的值,但如果你的程序实际上没有检查它的值那么它在程序行为上没有区别。除了通过调试器查看。

如果您打算在调试器中运行代码,那么最好在禁用优化的情况下编译它(为此目的)(许多C编译器选项-O0,包括gcc)。解决问题后,使用您认为合适的任何优化级别编译最终程序。