私が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 でもできるが、関数呼び出しのコストを使うためあまりよくない。
コメント