1樓:神拳無敵卍
不是前兩個位元組公用乙個位址,而是你的char陣列指標的位址丟了,有兩個字元輸入雖然可以顯示但是無效,你把這個陣列寫入檔案就會發現資料不對,再讀檔案資料也不對(要麼沒顯示,要麼亂碼)。字串的長度和資料型別占得位元組數的區別是字串要『\0』結尾長度自然要少乙個位元組,使用時注意char s[2]最多只能存2個位元組,作字串時最多只能存1個位元組。
可能前面的陣列指標的位址丟了你不是很明白,其實就是兩個字元儲存到了指標欄位了,指標長度為2個位元組。你用char s[10]就可以輸入12個字元多了就不行了,不信你試試,原因就是指標長度為2位元組,同理char s[100]就是102個字元,但是你輸入的資料都是無效的,雖然顯示正常
2樓:三國小風
s[2]的話對於字串來說應該是最多乙個位元組才對...字串結尾是要有\0標記結束的
不知道你「可輸入四個位元組」這個說法是從哪來的,字串占用的位址只與最開始時宣告的字元陣列大小有關,比如char s[2]就是只占用兩個位元組,不過如果考慮對齊的話可能占用四個位元組
3樓:匿名使用者
char s[2] 共可以輸入 4 個位元組不知道是怎麼得出的結論,確定不是溢位了?
位元組不會公用位址,乙個位元組乙個位址,資料型別不同,變數占用的空間不一樣大,但是不會公用位址
覺得你溢位的可能性比較大,沒看到你的**,只能猜測一下
下面還有種特殊情況給你參考:
一般vc這種開發環境下編譯**的時候資料都是4位元組對齊的(注意:不是說一定是這樣,vc環境中這個也可以自己修改的),這種情況在結構體比較容易發現
比如:struct test;
如果用 sizeof 計算一下這個結構體的大小,你可能得到的是 8 而不是 6,大小總是能被 4整除,這就是4位元組對齊,這樣好像就是多出來2個
這種機制是為了計算機處理資料處理的更快,你可以把 char s[2] 改成 char 2[4] 相互測試看看
4樓:帳號已經啟用
char 一般情況下是1個位元組,在某些編譯器裡是2位元組,所以 char s[2] 在那些編譯器中占用的是4個位元組。
另外,不可能有兩個位元組共用乙個位址。
5樓:
如果乙個變數佔了多個位元組,那麼這個變數的位址就是首位元組的位址,不是什麼兩個位元組公用乙個位址
6樓:
這個,char s[2] 一般來說只能輸入2個位元組啊,除非你的機器的編譯器把乙個 char 定義為2個位元組的大小。
7樓:小乖曉曉乖
你這樣是典型的記憶體溢位,也是軟體bug的根源之一。
c語言字串,要以\0 字元為終結,因此,最多只能包含n-1乙個字元。
一簡單c 問題如下? 5,一簡單c 問題如下?
一簡單c 問題如下?類b的物件有六個資料成員,x y z都是可見的。類是c 程式設計的核心成分,對構造滿足問題域中的抽象的程式是非常重要的。c 的類的結構被分為兩個部分。第乙個部分描述物件的外部檢視,它對應著抽象資料型別的規範說明。其中,識別符號被稱為類名。關鍵字private和public用於定義...
簡單c語言
邏輯與,邏輯或,邏輯運算子,同優先順序。其意義如下 a b 只有當a b都為真時,該表示式值才為真 a b 只有當a b都為假時,表示式值才為假。特別注意 似乎是c進行的優化 對於表示式a b,當a為真時,將不對b進行判斷,因為整個表達時的值已經確定了,為真 而對於表示式a b,當a為假時,將不對b...
又一C 問題,一簡單c 問題如下?
include include include define j 1e 1 誤差範圍。int main 看過程,答案是a b c d e length 還有兩組答案我就不寫了。呵呵,剛開始我也用你的方法算的,可求不出,我對c 也算是個菜鳥啊,只好用現在的方法求乙個有誤差的。分數就給你吧。2a b 3...