c程序如何打印由结构变量保存的字符数组?
如何打印结构变量c程序如何打印由结构变量保存的字符数组?,c,arrays,struct,char,C,Arrays,Struct,Char,如何打印结构变量char binary_filename中保存的char数组 我试过: printf("Binary file name is : %s \n", prv_instance_t.binary_filename); 但是,我得到了错误error:expected表达式在'prv\u instance\u t'之前 这是结构定义 #define BINARY_FILE_NAME_MAXLEN 10 typedef struct _prv_instance_ { /*
char binary_filename
中保存的char数组
我试过:
printf("Binary file name is : %s \n", prv_instance_t.binary_filename);
但是,我得到了错误error:expected表达式在'prv\u instance\u t'之前
这是结构定义
#define BINARY_FILE_NAME_MAXLEN 10
typedef struct _prv_instance_
{
/*
* The first two are mandatories and represent the pointer to the next instance and the ID of this one. The rest
* is the instance scope user data (uint8_t power in this case)
*/
struct _prv_instance_ * next; // matches lwm2m_list_t::next
uint16_t shortID; // matches lwm2m_list_t::id
uint8_t power;
uint8_t reset;
double dec;
char binary_filename[BINARY_FILE_NAME_MAXLEN];
} prv_instance_t;
只需删除
typedef
关键字即可
当前定义没有定义变量,但创建了两个等效类型prv\u instance\u t
和struct\u prv\u instance\u
。从您的问题中,我了解到prv\u instance\t
应该是类型的实例(变量)
,关键字typedef
是不必要的
您的printf
将用于:
#定义二进制文件名#MAXLEN 10
结构prv实例_
{
/*
*前两个是强制项,表示指向下一个实例的指针和这个实例的ID
*是实例范围用户数据(在本例中为uint8\t power)
*/
struct _prv_instance_*next;//匹配lwm2m_list_t::next
uint16\u t shortID;//匹配lwm2m\u列表\u t::id
uint8_t电源;
uint8_t重置;
双十二月;
char binary_filename[二进制文件名\u MAXLEN];
}prv_实例;
以及以下一项:
#定义二进制文件名#MAXLEN 10
结构prv实例_
{
/*
*前两个是强制项,表示指向下一个实例的指针和这个实例的ID
*是实例范围用户数据(在本例中为uint8\t power)
*/
struct _prv_instance_*next;//匹配lwm2m_list_t::next
uint16\u t shortID;//匹配lwm2m\u列表\u t::id
uint8_t电源;
uint8_t重置;
双十二月;
char binary_filename[二进制文件名\u MAXLEN];
};
结构prv实例prv实例t;
您正在使用类型本身。要访问结构的成员,必须首先声明该结构的实例。例如,Hello World
:
#包括
#包括
#定义二进制文件名MAXLEN 10
typedef结构\u prv\u实例_
{
char binary_filename[二进制文件名\u MAXLEN];
}prv_实例;
int main()
{
prv_实例_t foo,bar;
strcpy(foo.binary_文件名,“Hello”);
strcpy(bar.binary_文件名,“World”);
printf(“%s%s\n”,foo.binary\u文件名,bar.binary\u文件名);
返回0;
}
您尝试做的与
printf("%d", int);
您需要类型为
prv\u instance\u t
的变量,而不是类型本身。@Mat“您需要类型为prv\u instance\u t的变量”。我认为他需要一本好的书;fgets(var.binary_文件名,var.binary_文件名的大小,标准输入);var.binary_文件名[strcspn(var.binary_文件名,“\n”)]=0;printf(“二进制文件名为:%s\n”,var.Binary\u filename)在打印前,您应该显示初始化二进制文件名
的代码。@Yunnosch实际上第一个示例看起来像打印空字符串,但问题是关于编译错误。再次对投票人说:1)问题是关于编译错误;2) 在提供的示例中,prv_instance_t是全局的,因此其所有字段都将用defoult值初始化,这等于char binary_filename[binary_FILE_NAME_MAXLEN]={0}代码>@Yunnosch OK。我删除了引起无意义讨论的部分。我是否可以建议将措辞改为“.这使prv\u instance\u t
成为类似于…”类型的变量?当我第一次读到你有趣的答案时,我被绊倒了,无法立即理解其中的机制。