關於CString IsEmpty 的返回值

2021-06-06 18:05:55 字數 975 閱讀 7824

明顯是你的cstring當字串陣列用來當引數傳遞進去後返回了。這個例子很容易重現。找個winapi函式,這個函式必須是傳遞buf進去,然後用cstring作為引數傳遞進去。然後檢視cstring的長度。

舉例如下

c/c++ code

方式一:

cstring szfilename;

::getmodulefilename(null, szfilename.getbuffer(

0),max_path);

intnsize

=szfilename.getlength();

//你這個時候看看你的nsize是不是0

messagebox(szfilename);

//但是彈出的szfilename卻是非空的

方式二:

cstring szfilename;

char

buf[max_path];

::getmodulefilename(null, buf, max_path);

szfilename

=buf;

intnsize

=szfilename.getlength();

//你這個時候看看你的nsize已經正常了?

messagebox(szfilename);

//彈出的szfilename卻是非空的

綜上所述,是你拿cstring作為引數傳遞進去,改變了那段記憶體的值,但是系統卻沒有改變響應的cstring屬性值。這與你非法使用cstring作為引數是有關的。cstring 並不是單單是個記憶體空間,我覺得理解成乙個結構更有助於我們的深入了解。

這個跟外部變數或者全域性變數無關的,能使用成功,說明你的申明起碼得到了編譯器的認可

外部變數 excern cstring szfilename;

全域性變數 在類函式外部,類似標頭檔案寫的地方,直接寫cstring szfilename;

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...