2014-02-05 58 views
0
  rc = daoMp.retrieveSystemData(argv[2]); 
      printf("rc = %d\n"); 
      if (rc == 0) { 
       ErrLog("Mount point found\n"); 
       printf("Mount point found\n"); 
       return 4; 
      } 
      else { 
       ErrLog("Could not retrieve system data\n"); 
       printf("Could not retrieve system data\n"); 
       return -1; 
      } 

Output: rc = -208814497 
Mount point found 

怎麼來,如果塊驗證失敗?如果條件不起作用怎麼辦?

+4

看看你的第一個printf。更仔細。 –

+1

您首先通過不首先使用蹩腳的,類型不安全的C風格的調用,喚起了未定義行爲的最佳避免。 –

+0

對不起,我不明白。還有一些代碼的其他部分使用'if(rc <0)',我遵循相同的規則。我在這裏想念什麼?有人能幫我嗎? – kingsmasher1

回答

5

取而代之的是(這你調用不正確,一種說法太短):

printf("rc = %d\n"); 

這樣做:

std::cout << "rc = " << rc << '\n'; 

這樣,你將使用正確的C++方式來做到這一點(這會立即告訴你一些事情)。 printf()是從C繼承而來的,它本質上是不安全的 - 你的錯誤就是爲什麼的一個主要例子。

+0

但C++是C的超集,爲什麼它不起作用,我想知道。請提供任何提示? – kingsmasher1

+0

@ kingsmasher1 1. C++不是C的超集。2.正如我在回答中所說的,您調用的'printf()'有一個參數太短 - 您實際上並沒有將'rc'傳遞給功能。 – Angew

1

我相信你缺少第二個參數的printf:

printf("rc = %d\n", rc); 
0

printf("rc = %d\n");應該printf("rc = %d\n", rc);