結構體大小無法用strlen算出來

2021-09-23 14:13:17 字數 569 閱讀 7852

寫程式的時候發現了乙個奇怪的現象,調了好久。

話不多說,先上**

說說遇到的問題,程式中共有三個輸出buf大小和內容的地方。

第乙個地方,上面我是用memset在buf裡面填充了1的,但是雖然可以看到buf的長度是135,但是內容列印出來卻是空的。也就是說buf裡面實際上是填充了內容的,但是列印不出來。

在另乙個程式中相同**用gdb是可以看到值的。不知道為什麼。

第二個地方,用了型別轉換。並在結構體中填充了數值。但是列印的時候strlen算不出來結構體的大小,不知道為什麼,可能是結構體中間有\0的存在吧。而且列印%s也是沒有值的。就是這裡,找了好久才找到,一度以為強轉有問題。

第三個地方,跳過前面結構體的大小列印buf的值。可以看到,buf裡面的值還是存在的。strcpy會複製最後的\0,所以大小會變。

結構體的記憶體大小怎麼算

前言 想通俗的講解一下結構體的記憶體怎麼計算,所以再次寫了一篇這樣的文章,想將這個知識點描述得更加容易理解 正文 首先我們要知道結構體內存計算與編譯器的預設對齊數有關,一般windows環境預設對齊數為8,linux預設對齊數為4 1.結構體內存對齊的基準取記憶體最大的變數的位元組數與預設對齊數的較...

結構體大小

含有基本型別的結構體的大小所對應的最終決定因素是結構體內自身成員的分布。成員不同的分布將導致含有相同成員結構體大小的不同,每個成員的對齊都是以緊接著後面的乙個為參考的,如果緊接著的大於對應指定,就以緊接著的為對齊因子,否則將聯絡周圍的具體情況進行對齊,而且對齊因子只有三種型別 1,2,4。對於最後一...

結構體大小

結構體中的成員可以是不同的資料型別,成員按照定義時的順序依次儲存在連續的記憶體空間。和陣列不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在儲存結構體變數時的位址對齊問題。看下面這樣的乙個結構體 struct stu1 先介紹乙個相關的概念 偏移量。偏移量指的是結構體變數中成員的位...