2012-12-29 30 views
0

好吧,我會保持這個簡單,並不包括所有的代碼(但),如果我不需要。我的內心感覺告訴我,這可能是一個簡單的答案,我像往常一樣忽略它。更沒有經驗的人可能會說編譯器是問題,但我從來不知道99.999%的情況下,它總是以某種方式出現錯誤,所以......問題在這裏。 我有一個程序,這個程序應該輸出兩個字符串,沒有什麼花哨步驟調試工作正常,但沒有步進調試導致奇怪的錯誤,當使用_tprintf

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 
+2

它真的輸出「firststring」而不是「First Value」嗎?無論如何,我的猜測是輸出能夠正常工作,但稍後會被其他內容覆蓋。 (當您跨過第二個打印語句時,還沒有發生。)如果將輸出重定向到文件會發生什麼?所有的字符串都會在文件中結束嗎? –

+0

這將有助於擁有一套完整的代碼。我覺得我們錯過了一些東西,而我們錯過的東西可能是關鍵部分......你描述的並不是我期望看到的,我想我已經看到了大部分可以去的東西編程錯誤... –

回答

0

我後來改變從TCHAR *這些字符串爲const TCHAR * 當使用只讀字符串解決這個問題它應該是未定義的行爲,用字符串文字編寫一個字符串數組。我不確定是否因爲文檔本身被存儲爲unicode ,或者如果它甚至有一部分可以播放,但我學會了不要這樣指定的難題。如果我需要寫入這些位置,我應該使用單獨的常量字符串,並在需要讀/寫緩衝區時將其內容與strcpy複製。顯然,這樣做會導致安全漏洞和其他隱患出現在代碼中,儘管它很簡單。

(下面是我的只有部分代碼推理 - 鼠標如果有興趣)

至於沒被完整的代碼示例,這是一個非常大的項目有上千數千行代碼,我幾乎沒有想到這裏的任何人花費很多時間來完成這一切。畢竟,它不像任何人在這裏支付這樣做,我真的只需要找出是否是我或這是一個普通的事情,如果這是一個普通的事情,如何解決它。當我們在這裏提出問題時,我們不僅提出一個問題,而且還給出了我們期望得到答案的範圍有多寬的指導方針,而且我們絕不會期望任何人像某些人似的那麼剋制建議。如果你不想回答問題或沒有足夠的信息讓你這麼做,那麼就不要這麼簡單(這是因爲我們沒有掌握所有我們首先提出的信息) 。