将一些Python代码转换成C. 'just'想要声明一个typedef结构和一个指向它的指针...这是在printf(“byte order %p\n”,info-〉byte_order)中的分段;这应该怎么做?请帮助。试图遵循C typedef of pointer to structure,但我猜它已经过时了。
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <inttypes.h>
#include <Byteswap.h>
#define WFM_HEADER_SIZE 838
typedef struct WfmInfo{
uint16_t byte_order;
// char version[8];
uint32_t imp_dim_count;
uint32_t exp_dim_count;
uint32_t record_type;
uint32_t exp_dim_1_type;
uint32_t time_base_1;
uint32_t fastframe;
uint32_t Frames;
double tstart;
double tscale;
double tfrac;
double tdatefrac;
int32_t tdate;
uint32_t dformat;
double vscale;
double voffset;
uint32_t pre_values;
uint32_t post_values;
uint32_t avilable_values;
uint32_t dpre;
uint32_t dpost;
uint16_t bps;
uint32_t code;
uint32_t readbytes;
uint32_t allbytes ;
uint32_t samples;
uint64_t curve_offset;
uint32_t available_values;
} WfmInfo;
typedef WfmInfo* WfmInfo_ptr;
int testFuck(){
WfmInfo_ptr info;
printf( "info address %p\n", info);
printf( "byte order %p\n", info->byte_order);
cout<<"info declared"<<endl;
return 0;
}
2条答案
按热度按时间oknwwptz1#
这里是一个最小的例子。
我想要声明一个typedef结构和指向它的指针...
编译如下:
输出如下所示:
x一个一个一个一个x一个一个二个x
nwlqm0z12#
您的typedefs是正确的,
WfmInfo_ptr
是指向WfmInfo
结构的指针的类型。main
函数中的问题是您定义了这样一个指针info
,但没有初始化它,因此两个printf
调用都有未定义的行为:printf( "info address %p\n", info);
具有未定义的行为,因为%p
需要void *
,而您提供了WfmInfo *
,该WfmInfo *
在传递给vararg函数时未进行隐式转换info
未初始化,因此即使它作为(void *)info
传递,输出也没有意义。printf( "byte order %p\n", info->byte_order)
具有未定义的行为,因为您取消引用了未初始化的指针info
。cout<<"info declared"<<endl;
是C++代码,而不是C。还要注意的是,在typedef后面隐藏指针被认为是容易混淆和出错的。
将
info
定义为WfmInfo *info;
非常容易理解,并且很明显info
是一个没有隐式初始化的指针(不像C++中的结构或类可能有默认构造函数)。