2016-10-22 49 views
-2

每當我嘗試用fopen讀取文件時,程序崩潰。我無法讀取C文件 - 我的程序在運行時不斷崩潰。任何解決方案

下面是代碼行:

FILE *stopwatch = fopen(("C:/Users/Erlandas/Desktop/Research/C/TestNo%i/ProgramNo1/ProgramNo1Stopwatch.txt", currentTest), "w+") 

我也用fclose

當我拿走這兩行時,程序又開始工作。我使用的是Code::Blocks,因爲我無法在Eclipse上設置C和C++。

+1

http://ericlippert.com/2014/03/05/how-to-debug-small -programs/ – Biffen

+1

檢查您收到的警告(在第23行)。這不是python,你不能像這樣格式化字符串。 –

+0

所以我可以格式化字符串中的字符數組,然後把目標放在fopen? –

回答

3

這不符合你的期望。

您期待生成一個文件路徑並將其傳遞給fopen但這不是Python。

所以,你的結構

FILE *stopwatch = fopen(("C:/Users/Erlandas/Desktop/Research/C/TestNo%i/ProgramNo1/ProgramNo1Stopwatch.txt", currentTest), "w+"); 

相當於(因爲這樣,作品與多條語句:最後一個是在這種情況下返回):

FILE *stopwatch = fopen(currentTest, "w+"); 

currentTest爲整數,你會得到大量的警告(誰在乎警告:)),最後是一個崩潰,因爲fopen錯誤你的指針整數。

你必須使用sprintf例如在臨時緩衝區創建一個字符串,像這樣:

char buf[100]; 
sprintf(buf,"C:/Users/Erlandas/Desktop/Research/C/TestNo%i/ProgramNo1/ProgramNo1Stopwatch.txt", currentTest); 
FILE *stopwatch = fopen(buf, "w+"); 
+0

對不起,我沒有在Code :: Blocks中得到任何紅色的警告,所以我認爲一切正常。感謝您的解釋 –

+0

感謝您的幫助,但是我應該在每次使用它時清除陣列,以便在我要放入新目的地時使用它? –

+0

只是在它再次sprintf,它會覆蓋以前的數據。小心尺寸。 100對於大型路徑可能不夠。 –

相關問題