我們有以下功能:
void foo(int flag, void *ptr) {
if (flag)
strcpy(ptr, "Hello World");
code_that_does_not_attempt_to_modify_data_pointed_to_by(ptr);
}
以下內容是否有效:
const char *string_literal_ptr = "String literals are constant and may not be modified";
foo(0, string_literal_ptr);
我們將一個指向常量資料的指標傳遞給一個函式,該函式可能(但不會因為我們將 0 作為傳遞flag)修改指標指向的資料。考慮到程式控制在任何時候都沒有達到修改常量資料的地步,這是否有效?
uj5u.com熱心網友回復:
如果flag為假,則不評估,并且指向字串文字資料strcpy(ptr, "Hello World");的事實是無關緊要的。ptr
如果未執行路徑上的代碼可能導致未定義的行為(由于其評估,而不是由于翻譯程序中出現的某些語法約束),那么 C 將突破,因為空指標測驗不起作用:
if (p)
Use pointer p to do something.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434829.html
上一篇:在C中只讀的動態資料
