我正在用 C 制作一個資料結構庫,我決定使資料結構不透明,所以我有一個頭檔案 lew_arr.h
struct lew_arr;
以及帶有定義的源檔案lew_arr.c
struct lew_arr {
void *buff;
size_t len; //number of elements in the array
size_t cap; //capacity of the array
size_t sz; //number of bytes for each element
};
這里還有一個函式的定義,它為一個新的 lew_arr 結構分配記憶體,初始化它,并通過 out 引數回傳它
lew_err lew_arr_init(size_t const cap, size_t const sz, struct lew_arr **out_arr);
因為結構體沒有在header中定義,用戶無法訪問成員;但是,他們可以通過這樣的指標更改資料:
int main(void)
{
struct lew_arr *a;
lew_arr_init(10, sizeof(int), &a);
char *ptr = (void *) a;
*ptr = 1;
*ptr = 2;
//etc.
return 0;
}
我知道這會玩火,因為用戶不知道他們正在改變什么,但是有沒有辦法阻止用戶這樣做,或者這只是 C 語言中你必須相信程式員的事情之一知道他們在做什么嗎?
uj5u.com熱心網友回復:
其中之一的C語言編程的原則是“信任程式員”。雖然這個目標“在安全和安全編程社區方面已經過時”,但它仍然是 C 編程語言的精神。
有沒有辦法阻止用戶這樣做,
不。
或者這只是在 C 中你必須相信程式員知道他們在做什么的事情之一?
你必須“讓”他們去做。
我希望你真的不必“信任”他們,因為其他程式員會在他們的電腦上作業,而不是你的電腦,所以你的電腦應該是安全的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335258.html
上一篇:獲得另一個變數輸入后變數重置
