如何将文件内容读取到静态声明的变量?
How to read contents of a file to a statically declared variable?
我有一个二进制数据文件,其中前四个字节是我想要读取的一些整数。我只是这样做:
int * num_rounters_p = malloc(sizeof(int));
fread(num_rounters_p, 4, 1, p_file);
printf("%d\n", *num_routers_p); // 10
这很好用(如果不行请告诉我!),但是我确实知道这个特定值的大小,所以没有必要动态存储它。
是否可以做类似的事情
int x = some_read_function(4, 1, p_file);
printf("%d\n", x); // 10
基本上将值存储在堆栈而不是堆上?上面的代码示例当然不是基于 C,但我希望我明白了我的意思:))
嗯!容易修复。只是做:
int num_routers;
fread(&num_routers, sizeof(int), 1, p_file);
最直接的方法是
int num_routers;
size_t items_read = fread( &num_routers, sizeof num_routers, 1, p_file );
if ( items_read < 1 )
{
// read error, handle as appropriate
}
else
{
// do something with num_routers
}
一个int
不保证4字节宽,只保证至少2字节宽,所以使用[=12=更安全] 而不是文字 4
。当然,这假设二进制文件是在您正在读取的同一平台上编写的。
我有一个二进制数据文件,其中前四个字节是我想要读取的一些整数。我只是这样做:
int * num_rounters_p = malloc(sizeof(int));
fread(num_rounters_p, 4, 1, p_file);
printf("%d\n", *num_routers_p); // 10
这很好用(如果不行请告诉我!),但是我确实知道这个特定值的大小,所以没有必要动态存储它。
是否可以做类似的事情
int x = some_read_function(4, 1, p_file);
printf("%d\n", x); // 10
基本上将值存储在堆栈而不是堆上?上面的代码示例当然不是基于 C,但我希望我明白了我的意思:))
嗯!容易修复。只是做:
int num_routers;
fread(&num_routers, sizeof(int), 1, p_file);
最直接的方法是
int num_routers;
size_t items_read = fread( &num_routers, sizeof num_routers, 1, p_file );
if ( items_read < 1 )
{
// read error, handle as appropriate
}
else
{
// do something with num_routers
}
一个int
不保证4字节宽,只保证至少2字节宽,所以使用[=12=更安全] 而不是文字 4
。当然,这假设二进制文件是在您正在读取的同一平台上编写的。