2014-01-16 47 views
0

這是否正確調用實際上不存在於condintion中的某些東西?調用某些條件中不存在的東西

我使用if語句來檢查兩個條件,但對於第一次迭代,其中一個被調用的參數不存在。然而,程序運行良好,但它仍然是正確的?

該程序採用全名並將第一個首字母轉換爲大寫並打印它們。

int main(void) { 
    string fullname = GetString(); 
    for (int i = 0, n = strlen(fullname); i < n; i++) { 
     if (fullname[i] != ' ' && fullname[i-1] == ' ') { 
      printf("%c", toupper(fullname[i])); 
     } 
    } 
    printf("\n"); 
    return 0; 
} 
+0

這是什麼編程語言? –

+0

如果您希望有時候某些東西不存在,那麼首先檢查Null,並且只有在不爲空時才繼續 –

回答

0

簡短的回答:這不是正確的,儘管它運行良好的時候。

對於&&,如果fullname[i] != ' '是假的,編譯不會檢查fullname[i-1] == ' 'false && whatever將始終爲false。這就是爲什麼它會正確運行有時。這就是所謂的Short-circuit evaluation

但是,您應該避免在實踐中編寫這樣的代碼。當fullname[i] != ' '爲真時,它可能會導致錯誤。然後它將評估fullname[i-1] == ' ',即fullname[-1],這將觸發Access Violation at Address Error。嘗試將if語句來更改爲以下:

if (fullname[i]!=' ' && i>0 && fullname[i-1]==' ') { // make it always right 
0

不,這是不正確的,並可能導致程序崩潰。對於上面的代碼,如果全名是「Fred」,那麼您將檢查全名[-1]。最好的情況是,這將包含一個未定義的值 - 但如果全名正好在您的程序分配內存的邊界處,則您將訪問允許範圍之外 - 因此程序崩潰。

只能訪問您所知道的設置。

0

你不能只是嘗試

for (int i = 1, n = strlen(fullname); i < n; i++) { 

在偏移的1除非字符串長度爲1開始?

相關問題