【发布时间】:2016-05-06 17:23:45
【问题描述】:
我有以下程序,其中我有一个结构。我将为它分配一些值并将其写入文件。 但这里的困惑是,我刚刚声明了一个指向该结构的指针并且没有分配内存。那么变量赋值是如何工作的呢? 我能够从文件“/home/info”中正确检索值
#include <stdio.h>
#define FILEE "/home/info"
typedef struct my_info
{
int i;
int j;
int k;
int l;
}_my_info;
void main()
{
_my_info *my_info;
int fd;
FILE *fp;
my_info->i=100;
my_info->j=300;
my_info->k=200;
my_info->l=400;
fp = fopen(FILEE,"w");
if (fp == NULL)
printf("Error in opening file\n");
fd=fwrite(my_info, sizeof(_my_info), 1, fp);
if (fd<0)
printf("Error while writing\n");
fclose(fp);
}
【问题讨论】:
-
如果你写信给
*my_info而不先分配一些东西,这是未定义的行为。为什么你仍然需要一个指针?为什么不直接使用堆栈并声明_my_info my_info? -
它不起作用。它只是看起来像是在工作。以后可能会中断。
-
3 个注释; 1 - struct namespace 和 global namespace 是分开的,所以你可以做
typedef struct my_info {...} my_info;没有冲突,2,你也可以简单地声明一个typedef 到struct 单独@ 987654325@ 和 3,您可以简单地在代码中声明一个静态实例(例如_my_info my_info;并保留空间,然后您必须使用 dot 运算符(例如my_info.i = 100;等) -
请丢弃任何书籍或教程告诉你使用
void main()。这是int main(void)。您检查fopen是否成功,但如果失败则打印错误消息,然后继续访问该文件。 -
未定义行为的行为未定义。
标签: c memory dynamic-memory-allocation