看板 Electronics 關於我們 聯絡資訊
※ 引述《invalid (everlasting)》之銘言: : ※ 引述《adddream (哆啦A孟)》之銘言: : : 了解 : : 真是太感謝您囉 : : 不過想再追問一下 : : (1)為捨'\0'是表示false阿 : 更精確一點,在C/C++及一些其他語言中 : 'x'代表的型態是int (不是char*) : 所以應該要說"\0"比較適當一點 : "\0"的意思就是使該字元的ascii code值為\後面的數字 : C/C++中也有一些方便記憶的序列,例如\n,\r,\b... : 最早的C是沒有boolean的型別的 : 所以用int來代表真假 : 0為假,非0為真 我剛才查了一下C的規格書--ISO 9899:1999。 如果我沒會錯意的話: 『""』包起來的東西是一個array of character type, 它會傳給lvalue一個address(也就是它的rvalue), 所以一般來說"\0"不等於0。 可以用這個程式碼來測試把"\0"傳回的東西當作指標運算,應該會印出0: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #include <stdio.h> int main() { int a = (int) "\0"; char c = *((char *) a); printf("%d", c); return 0; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 換言之使用『""』建立字串時,程式會先在記憶體中配製一塊空間給該字串(字元陣列)。 並把第一個字元的位址傳給lvalue。 (以上部份是我參考規格書的想法,如有會錯意請見諒,我不是C語言高手。) 而'\0'應該為0,雖然我在C規格書查不到。不過可以測試這個程式碼: if('\0' == 0) printf("Yes.\n"); 另外我還查到規格書說『false』會被macro expands to 0, 『false』被定義在stdbool.h裡面。 : : (2)還有就是通常在陣列裡頭結尾(不管是指哪種陣列)不都是會加上'\0'嗎? : : 還是說是我記錯了@@' : 這只有C-like string才是這樣 : 這只是為了方便以最小的記憶體操作字串的技巧 : 你高興自創一個不用\0的string也可以 : 只是就不能用string.h裡面的函式啦 : 另外"\0"可以想成是signature,通常用來代表特定區塊的邊界 : 譬如說FAT32分割區中會以0xAA55代表分割區的開始 : 要注意的就是通常只有"文字"資料才會"只"利用signature來切割 : (FAT32其實還有其他欄位去進行辨認) : 如果你的資料是binary形式的 : 通常就會使用類似HTTP協定加註資料長度的方式來辨別區塊的邊界 : 要不然就要使用strip的方式,將衝突的signature先替換掉 -- 《金剛經》 離一切諸相,則名諸佛。 http://web.cc.ncu.edu.tw/~93501025/jg.doc -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.201.94 ※ 編輯: zxvc 來自: 140.115.201.94 (02/25 20:04) ※ 編輯: zxvc 來自: 140.115.201.94 (02/25 20:05)
adddream:感謝 ^^ 02/25 21:28