2011-08-06 19 views
0

私は非常に基本的な疑いがあります。文字列へのポインタを宣言します。文字列へのポインタの初期化

char *data; 

data = malloc(13*sizeof(char)); 

私の質問は、私は、文字列を初期化しない方法で、次のようにメモリを割り当てます。 は

data = NULL; 

行うには正しいことです。

おかげ

+0

初期設定はどういう意味ですか?そして、それはあなたが今、割り当てられたメモリのブロックを持っているが、ポインタを持たないので、正しいことではありません。メモリーリーク。 – Griffin

+0

@グリフィン...私は疑いがあり、あなたのようなインテリジェントな人々の助けが必要でした。 –

答えて

1

を設定する必要があります。

memset(data, 0, 13); 

はそれを行います。

あるいは、として@Griffin同時に領域を割り当てて初期化する代わりmalloccallocを使用して、と述べました。

+1

callocは簡単です。 – Griffin

+0

これはtrue.3ch – MByD

+0

@MByD ...ありがとうございます。 –

0

free機能を見てください。初期化することにより、あなたはすべてゼロにそれを作る意味場合

+2

初期化に 'free'? –

+0

@arun ...私は –

+0

を初期化しようとしていました。申し訳ありませんが、それはタイプミスだと思いました。データ= NULLは私があなたが記憶を解放しようとしていると思うようにしました。はいmemsetは行く方法です。それは本当に何も達成しませんが。 APIや関数が 'data'を渡してすべての0やそれ以上のものを必要とする場合を除きます。 – arunkumar

1

あなたが、その後、使用にmemset

2

あなたは空の文字列に文字列を初期化したい場合は、

*data = '\0'; 

を行うには正しいことです。あなたが割り当てた13バイトのメモリではなく、可変ポイントをNULLにすることでした。

2

空の文字列が必要な場合は、data[0] = '\0'だけでも問題ありません。あなたのサンプルショーのようなdata = NULLを設定すると、メモリ割り当てがリークするだけです。

0

いいえ、memset/memcpy関数またはstrncpy関数を検討してください。

memset(void *b, int c, size_t len); 

を使用すると、memcpyをして、メモリ領域をinitalizeたり、メモリ領域にデータをコピーすることができますstrncpすることができます。文字列を扱う場合は、strncpyを使用してください。

お楽しみください