2017-07-18 2 views
0

構造変数char binary_filenameに保持されているchar配列を出力するにはどうすればよいですか?cプログラム構造体変数が保持するchar配列を出力する方法は?

私が試した:

printf("Binary file name is : %s \n", prv_instance_t.binary_filename); 

をしかし、私はここでエラーにerror: expected expression before ‘prv_instance_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; 
+2

に似ています。 – Mat

+1

@Mat ** _ "prv_instance_tタイプの変数が必要です" _ **。私は彼が必要と思うprv_good_C_book_t –

+0

'prv_instance_t var; fgets(var.binary_filename、sizeof var.binary_filename、stdin); var.binary_filename [strcspn(var.binary_filename、 "\ n")] = 0; printf( "バイナリファイル名は:%s \ n"、var.binary_filename); ' – BLUEPIXY

答えて

0

キーワードtypedefを削除するだけです。

現在の定義では変数は定義されていませんが、2つの同等の型prv_instance_tstruct _prv_instance_が作成されます。あなたの質問から、私はprv_instance_t_prv_instance_のインスタンス(変数)でなければならないことを理解しています。キーワードtypedefは不要です。

あなたprintfと連携する:

#define BINARY_FILE_NAME_MAXLEN 10 

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; 

ならびに1つを次のように:あなたは型自体を使用している

#define BINARY_FILE_NAME_MAXLEN 10 

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]; 
}; 

struct _prv_instance_ prv_instance_t; 
+0

@Yunnosch実際に最初の例は空文字列を印刷するように見えますが、コンパイルエラーに関する質問がありました。 – VolAnd

+1

もう一度、ダウン投票者のために:1)コンパイルエラーに関する質問でした。 2)与えられた例のprv_instance_tはグローバルなので、すべてのフィールドは 'char binary_filename [BINARY_FILE_NAME_MAXLEN] = {0};' – VolAnd

+0

@Yunnosch OKと等しいデフォールト値で初期化されます。私は無意味な議論を引き起こす部分を削除しました – VolAnd

2

。構造体のメンバにアクセスするには、まずその構造体のインスタンスを宣言する必要があります。例えば、this will printHello World

#include <stdio.h> 
#include <string.h> 

#define BINARY_FILE_NAME_MAXLEN 10 

typedef struct _prv_instance_ 
{ 
    char binary_filename [BINARY_FILE_NAME_MAXLEN]; 
} prv_instance_t; 


int main() 
{ 
    prv_instance_t foo, bar; 
    strcpy(foo.binary_filename, "Hello"); 
    strcpy(bar.binary_filename, "World"); 

    printf("%s %s\n", foo.binary_filename, bar.binary_filename); 
    return 0; 
} 

何をしようとしていることはあなたが型の変数を必要とする `prv_instance_t`、ないタイプ自体

printf("%d", int);