【发布时间】:2012-12-29 10:30:51
【问题描述】:
好的,如果我不需要的话,我将保持这个简单并且不包括所有代码(目前)。我的内在感觉告诉我,这可能有一个简单的答案,而我像往常一样忽略了它。更有经验的人可能会说编译器是问题所在,但我从来不知道在 99.999% 的情况下,它在某种程度上一直是我的错误,所以......这就是问题所在。 我有一个程序,这个程序应该输出两个字符串,没什么花哨的
TCHAR* firststring = _T("FirstValue");
TCHAR* secondstring = _T("SecondValue");
_tprintf(_T("%s\n"),firststring);
_tprintf(_T("%s\n"),secondstring);
哪个输出..
firststring
在我的代码的特定部分,这不起作用(它在其他地方起作用)除非我是逐步调试...然后没关系...
firststring
secondstring
我什至尝试通过这样做将操作合二为一:
_tprintf(_T("%s\n[%s]\n"),firststring,secondstring);
我的结果是,第一个字符串,大括号在那里试图指出字符串试图被打印出来,如果它是空的,等等。我得到这个输出:
firststring
]
就是这样..再一次,除非跨步调试,否则一切都很好,花花公子:
firststring
[secondstring]
有人听说过这样的问题吗?我最后一次遇到像这样的奇怪问题是在 ASM 时代的段对齐,但我怀疑这里的情况,虽然我不确定 _tprintf 的内部工作原理......如果没有人,我会再试一次知道,我会假设它是因为前面的代码引起的错误。主要问题是,这是否出于任何简单的原因发生,或者这是否只是指出程序早期的问题,仅此而已。感谢您的回复。
PS:我意识到我没有提供足够的代码来完全回答问题,但问题是调试器中的这种行为是否存在已知的简单原因(运行与步进) .断点设置在函数级别,我使用的是 Visual Studio 2008。编译器版本如下:
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
【问题讨论】:
-
它真的输出“firststring”而不是“First Value”吗?无论如何,我的猜测是输出可以正常工作,但稍后会被其他内容覆盖。 (当您跳过第二个打印语句时,这还没有发生。)如果您将输出重定向到文件会发生什么?所有的字符串都在文件中吗?
-
拥有一套完整的代码真的很有帮助。我觉得我们遗漏了一些东西,而我们遗漏的很可能是关键部分......你描述的不是我期望看到的,我想我已经看到了大部分可以去的东西编程错误...
标签: c++ visual-studio-2008 printf msvcrt crt