好吧,我将保持简单,如果我不需要的话,我将不包括所有代码(尚未)。我的内心感知告诉我,这可能是一个简单的答案,我照常忽略了它。没有经验的情况可能会说编译器是问题所在,但我从来不知道这种情况是99.999%的时间,这在某种程度上一直是我的错误,所以……这个问题。我有一个程序,该程序应该输出两个字符串,没有什么花哨的
TCHAR* firststring = _T("FirstValue");
TCHAR* secondstring = _T("SecondValue");
_tprintf(_T("%sn"),firststring);
_tprintf(_T("%sn"),secondstring);
输出..
firststring
在我的代码的特定部分中,除非我是逐步进行的,否则这是不起作用的(在其他地方起作用)...然后很好...
firststring
secondstring
我什至尝试通过这样做将操作组合到一个操作中:
_tprintf(_T("%sn[%s]n"),firststring,secondstring);
我的结果是,第一个字符串和括号在那里试图指出字符串正在尝试打印出来,如果是空的等。我得到了此输出:
firststring
]
就是这样..再次
firststring
[secondstring]
有人听说过这样的问题吗?我上次遇到这样的奇怪问题是在ASM时期回到细分时的时光,但我怀疑这里是这种情况,尽管我不确定_tprintf的内在工作...我将再次尝试,如果没有人,没有人知道,我会假设它是因为较早的代码引起的错误。主要的问题是,这是出于任何简单原因而发生的,还是这样做只是指出了程序中的早期问题,仅此而已。感谢您的答复。
ps:我意识到我没有提供足够的代码来完全回答问题,但是问题是在调试器中是否存在这种行为的已知简单原因(运行与渐进式)。断点设置为功能级别,我正在使用Visual Studio2008。编译器版本如下:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 80x86
Microsoft (R) Macro Assembler Version 9.00.21022.08
Microsoft (R) Incremental Linker Version 9.00.21022.08
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Microsoft Browse Information Maintenance Utility Version 9.00.21022
Microsoft (R) Manifest Tool version 5.2.3790.2075
i后来通过将这些字符串从tchar*更改为const tchar*解决了此问题仅使用读取字符串时,据说是不确定的行为,可以用字符串文字编写字符串数组。我不确定是否是因为文档本身被存储为Unicode或者,如果那甚至扮演角色,但我学会了很难分配这样的方法。如果我需要写给那些位置,我应该使用一个单独的常数字符串,并在读/写缓冲区中需要它时将其与strcpy复制。显然,即使这很简单,也不会这样做会导致安全孔和其他陷阱出现在代码中。
(以下是我仅在部分代码上的理由 - 如果有兴趣,则鼠标
)至于代码示例尚未完成,这是一个非常大的项目,成千上万的代码行,我几乎不希望这里的任何人都花那么多时间来完成这一切。毕竟,它不像这里的任何人都可以这样做,我真的只需要找出是我还是很普遍的事情,如果是常见的事情,那么如何修复它。当我们在这里提出问题时,我们不仅要问一个问题,而且我们还为答案的范围提供了指导,我们绝不希望任何人都会变得明确建议。如果您不想回答问题,或者没有足够的信息可以这样做,那就不要那么简单(这是因为我们没有首先提出的所有信息)。