Hatena::ブログ(Diary)

うなすけとあれこれだったもの このページをアンテナに追加 RSSフィード Twitter

2012年05月16日

C言語での文字型配列の初期化とクリア

宣言した文字型配列に、なんか文字列を代入しました。

char twitter_id[] = "yu_suke1994";

で、この配列初期化してまた別の文字列を代入したい時って、どうしてました?


C言語初めて2ヶ月までの僕

「えーっと、ヌル文字でクリアすればいいんだから……」

char twitter_id[] = "yu_suke1994";
int id_length = strlen( twitter_id );

//forループで要素ごとにヌル文字を代入
for( int i = 0; i < id_length; i++ )
{
	twitter_id[i] = '\0';
}

これって……なんだか見た目がバカっぽいし、もっと簡単に書けそう。


最近までの僕

「ヌル文字って、文字列の末尾を示すんでしょ?だったら……」

char twitter_id[] = "yu_suke1994";

//配列の先頭要素にヌル文字を代入
twitter_id[0] = '\0';

よくわからない危なっかしさが漂う書き方。


このように書くのが一般的?
char twitter_id[] = "yu_suke1994";
int id_length = strlen( twitter_id );

//memset関数を使用
memset( twitter_id , '\0' , id_length );


memset関数とは

memsetとは、<string.h>(文字列操作関数群)で定義されているC言語関数である。
指定されたポインタが指すオブジェクトの先頭から、指定された文字数分に、指定したデータを書き込むはたらきをする。

http://ja.wikipedia.org/wiki/Memset

引数の指定は、

memset( /*文字型配列の先頭アドレス*/ , /*代入したい文字*/ , /*文字型配列の長さ*/ );

と、こんなふうになっております。

これからはこの関数を使っていこうかと思います。
※ヌル文字とか言っときながら改行を代入してたのを修正
※文法上の誤りを訂正。MAY君ありがとう。僕のC言語力が露呈しますね^^^^^^^^^^^^^^^^^^;

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/yu_suke1994/20120516/1337171028