2014-07-18 150 views
0

所以我運行這段代碼打開一個文件並比較一個本地字符與存儲在文件中的值,但由於某種奇怪的原因,strcmp告訴我「15」等於「17」。 。 有什麼想法嗎?這很奇怪,因爲該問題只發生在第17行。這裏是相關的代碼:strcmp比較不正確

... 
string line; 
size_t found; 
size_t nextFound; 
char ID[11]; 
char storage_ID[11] = "15"; 


//Open the file 
ifstream file(FILE); 
if (file.is_open()) 
{ 
    for (int count = 0; count < 25; count++) 
    { 
     getline(file,line); 
     if (file.eof()) 
     { 
      return; 
     } 
     //store object ID 
     found = line.find(":"); 
     strcpy(ID[count],line.substr(0,found).c_str()); //stores ID from the start of a line until a ":" is found 
     if(strcmp(storage_ID,ID[count])==0) 
     { 
      foundID = true; 
     } 

     else 
     { 
      foundID = false; 
     } 

而這裏的文件是什麼樣子:

... 
1:1234567890:101:A123B4CD 
2:2234567890:102:B123B4CD 
3:3234567890:103:C123B4CD 
(this goes on for 20 lines) 

感謝您的幫助!

+6

你有[ *未定義的行爲*](http://en.wikipedia.org/wiki/Undefined_b ehavior)在你的代碼中,比較一個字符串與單個字符。與上面一行中的「strcpy」調用相同。 –

+1

你也把'strcpy'轉換成'char'。 'ID'應該是一串字符串嗎? –

+3

另外,爲什麼你在C++程序中使用C風格的字符串,其中你已經在使用C++'std :: string'類來處理一些變量? –

回答

1

也有一些是錯誤的代碼,您聲明char ID[11];的11個字符數組,在循環,其中計數從0到25的分配去ID [計數](時數爲12,你正在閱讀從文件中的12個ID,你會寫無效的內存ID [?12])

的代碼應該是:

char ID[11]; 
... 
strcpy(ID,line.substr(0,found).c_str()); //stores ID from the start of a line until a ":" is found 

假設沒有ID的大小爲> 11

+0

謝謝@NetVipeC - 我輸入了有關ID數組的錯誤信息,但你已經明確了這一點。謝謝! – rselvak6