[C言語]ポインタで取得した文字配列

C

私がCを始めて、最初に嵌ったこと。
忘れ…ることはなさそうですが、いつでも見られるようにメモしておきます。

方法①

普通の初期化で、配列内の1文字目のみ初期化する。効率は高い。
文字列を空にしたことにはできるが、文字列をクリアしたことにはならない。

 char s[] = “abcde”;
 s[0] = ‘\0’;
 
 puts(s);
 printf(‘%zu\n”, strlen(s));
 
 printf(%c%c%c%c%c\n, s[0], s[1], s[2], s[3], s[4]);
 printf(“%zu\n”, sizeof(s));
 
 return 0;
 
—-実行結果—————————
0
bcde
6

===========================================================

方法②

配列全体をNullクリアする。

 char s[] = “abcde”;
 
 memset(s, ‘\0’, sizeof(s));
 
 puts(s);
 printf(‘%zu\n”, strlen(s));
 
 printf(%c%c%c%c%c\n, s[0], s[1], s[2], s[3], s[4]);
 printf(“%zu\n”, sizeof(s));
 
 return 0;
 
—-実行結果—————————
0

6

===========================================================

なお、strcpy でもできるが、関数呼び出しのコストを使うためあまりよくない。

コメント

タイトルとURLをコピーしました