我有几个关于 cstrings 的问题想澄清:
1)初始化:当如下声明一个字符数组时,C++会自动将其定义为cstring吗?或者(我相信)一个字符数组?
char a[10];
换句话说,这是一个只包含空终止符 ('\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等)时,是否处理空终止符?例子:
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
对不起,混乱。