结构体包括指针为什么不能写文件
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赋值。