cstrings について明確にしたい質問がいくつかあります。
1) 初期化: 次のように文字の配列を宣言するとき、C++ は自動的にそれを cstring として定義しますか? または(私が信じているように)文字の配列ですか?
char a[10];
言い換えれば、これは null ターミネータ ('\0') のみを含む文字の配列ですか、それとも空の文字配列ですか?
2) cstring のインデックス ( i.e. a[i] = ch+1;
) を直接操作する場合、cstring は自動的にヌル ターミネータを処理しますか、それともスペースを空けて挿入するのはプログラマの責任ですか?
コード例 (これが正しい答えだと思います):
char a[10];
int i = 0;
cin.get(ch);
while(ch != '\n' || i < 9) {
a[i] = ch;
counter++;
cin.get(ch);
}
a[i] = '\0'; //either the last index(9)
//or the one right after the
//last input will be set to '\0'
3)<cstring>
ライブラリ (strncpy、strncat など) を使用する場合、null ターミネータは処理されますか? 例:
char myCstring[] = "I am a cstring"; //size of 15 (including '\0' at i == 14)
strncpy(myCstring, "I am NOT a string object", 14);
これは次の配列になりますか?
| I | | a | m | | N | O | T | | a | | s | t | r | '\0' |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
そして最後に:
char myCstring[] = "I am a cstring"; //size of 15 (including '\0' at i == 14)
strncpy(myCstring, "I'ma cstring", 14);
これは次の配列になりますか?
| I | ' | m | a | | c | s | t | r | i | n | g | '\0' |x|x|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
混乱して申し訳ありません。