結構體包括指針為什麼不能寫文件
1. C語言文件、指針、結構體的問題,,,
幾個問題
1.對於你這個程序本身,讀數據到指針p,不過指針p並沒有初始化,也沒有分配內存,是一個標準的野指針,所以對其操作本身就是非法的,不死機已經不錯了
2. fread(p,sizeof(Sq),2,fp); 這個功能是讀兩個Sq出來,這個你清楚吧? 你寫入文件的也是兩個sq嗎?
3. 寫入的時候是怎麼寫入的? 有一點要注意,你這個是鏈表形式的,每個Sq都有一個指向下一個節點的指針。而這個指針代表下一個節點的內存地址首值 對於程序來說,每次分配的內存地址值不同,所以如果你寫入的包括這個首值 那麼這個首值是沒有意義的
對於鏈表向文件的讀寫,和數組是不同的
寫的時候需要把各節點分別寫入,並且最好去掉next的值,因為沒有意義
讀的時候,要依次創建每個節點,再讀取每個節點
有什麼不懂的 可以再追問
2. 為什麼無法將結構體中的內容寫入文件(C語言)
創建一個文件,然後用fprintf按照自想要的格式輸入進去
3. 未定義指針的結構體數組寫入文件
數組名就是指針
比如 struct data a[10];
a[0].a
a[0].b
a[1].a
a[1].b
4. typedef定義了結構體指針,為什麼不能在該結構體裡面用
你在那裡聲明指針時用lbp next寫法就沒有根據了,編譯到那裡時還沒有發現lbp呢!C/C++的規則是必須先聲明,後使用。你在「lb,*lbp;」後的任何地方使用就都可以了……
5. 為什麼結構體中有指針類型就不能用「=」賦值了
每個數據都是一個箱子,每個指針都是一個號碼,這個號碼對應另一個箱子
其他類型的數據用=復制時,從一個箱子變成兩個相同的箱子
指針用=復制時,從一個號碼變成兩個相同的號碼——不管變成多少個,相同的號碼永遠對應同一個箱子,當一個人去砸這個號碼對應的箱子的時候,另一個持有相同號碼的人不可能當作沒看見
6. 函數形參里有結構體指針,為什麼在頭文件生
C語言用結構體指針作函數參數
這種方式比用結構體變數作函數參數效率高,因為無需傳遞各個成員的值,只需傳遞一個地址,且函數中的結構體成員並不佔據新的內存單元,而與主調函數中的成員共享存儲單元。這種方式還可通過修改形參所指成員影響實參所對應的成員值。
例如
struct book
{
char bookname[30];
int quantity;
};
main()
{
void fun(struct book*p);
struct book book1={"Programming in C",10};
fun(&book1);
printf("%d copies\n", book1.quantity);
}
void fun(struct book*p)
{
printf("The book \" %s\" has ",p->bookname);
p->quantity -=3;
}
顯示:The book "Programming in C" has 7 copies
此外,還可將結構體數組作為函數參數;還可設計結構體指針型函數,即返回的地址是指向結構體類型數據的。
7. C語言 結構體指針字元 二進制文件寫入和讀取
當然不對了,你的結構體成員,是一個指針
sizeof(student) ,win32是4位元組,win64是8位元組
當讀入其中4個或8個位元組時,它指向的指針地址並不一定存在
你可以定義為一個字元數組
8. C語言中的結構體中定義的數字為什麼不能用指針的方法來輸出呢
p是NODE *
*p是NODE
你直接cout <<*p
和cout<<n1是同樣的效果
除非對NODE類型做了<<重載,否則就是編譯報錯了
9. 請問大家,一個結構體含有指針型的成員變數,如何有效的將這個結構體寫入文件中。
再次寫入name值就行啊
按順序讀出來, 讀出來的時候,再給name賦值。