2016-08-11 27 views
0

が欠けている:私の主な機能にはは、構造体のchar型の配列を初期化しようとしているが、私はこのような構造体持っている何か

typedef struct 
{ 
    char private_key[ PRIVATE_KEY_SIZE ]; 
    char certificate[ CERTIFICATE_SIZE ]; 
    uint8_t cooee_key [ COOEE_KEY_SIZE ]; 
} platform_dct_security_t; 

を、私は私の変数を宣言:今すぐ

platform_dct_security_t* dct_security = NULL; 

私はこの構造体の配列を埋める必要があります。

私はまた私の証明書は次のように定義されています

#define CERTIFICATE_STRING \ 
"-----BEGIN CERTIFICATE-----\r\n"\ 
"MIIFIzCCBAugAwIBAgIETB0zITANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UE\r\n"\ 

         ... 
         ... 

"uhZ2VrLWSJLyi6Y+t6xcaeoLP2ZFuQ==\r\n"\ 
"-----END CERTIFICATE-----\r\n"\ 
"\0"\ 
"\0" 

だから私は進ん:

memcpy(dct_security->certificate, CERTIFICATE_STRING, CERTIFICATE_SIZE); 
printf("\n%s\n", dct_security->certificate); 

しかし、これは何かのゴミを出力します。また、私はこれを試してみましたが、それはどちらか動作しませんでした:

(*dct_security) = { CERTIFICATE_STRING, PRIVATE_KEY_STRING, COOEE_KEY_STRING }; 

私はコンパイルしてこれを実行すると、それがクラッシュしていませんが、それは立ち往生し、何もプリントアウトされません。

私はstructを持たずに、別のcharの配列を定義した場合、それは魔法のように動作:

私は間違っているつもりです
char xyz[ CERTIFICATE_SIZE ]; 
memcpy(xyz, CERTIFICATE_STRING, CERTIFICATE_SIZE); 
printf("\n%s\n", xyz); 

?これをどうやって解決するのですか?

+5

ポインタ変数 'dct_security'を実際にどこか有効にするようにしますか?あなたは[最小限の、完全で、証明可能な例](http://stackoverflow.com/help/mcve)を作成して私たちを見せてください。 –

+1

@JoachimPileborgの意味は:(例えば 'malloc'を使って)ポインタのためにメモリを割り当てていたのでしょうか、それともどこかで初期化しましたか? – ckruczek

+0

'dct_security'は' platform_dct_security_t'型の変数ではありません! [mcve] – Olaf

答えて

0

Joachim Pileborgckruczekはわかりました。dct_securityのメモリを割り当てる必要がありました。この変更により、問題は解決されました。

platform_dct_security_t* dct_security; 
dct_security = malloc(sizeof(platform_dct_security_t)); 
+0

'malloc'の結果をキャストしません。また、コードの他の部分で '(char *)'キャストを使用しないでください。代わりがない限り、キャストの使用を避けてください。 –

+0

@ M.Mありがとう、編集中。 – Motun

関連する問題