Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c程序如何打印由结构变量保存的字符数组?_C_Arrays_Struct_Char - Fatal编程技术网

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
成为类似于…”类型的变量?当我第一次读到你有趣的答案时,我被绊倒了,无法立即理解其中的机制。