У меня есть несколько вопросов, которые я хотел бы уточнить, о cstrings:куча вопросов о CString С ++
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
Извините за беспорядок.
Один вопрос на вопрос, пожалуйста. – Veedrac
C и C++ не имеют формальной концепции «C-строки»; С-строка - это не что иное, как массив символов с 0 байтом, помещенным после последнего допустимого символа в строке. –
@remyabel: Что обычно называют «cstring», это то, что стандарт C вызывает «строку». Это по определению «непрерывная последовательность символов, заканчивающихся и включающая первый нулевой символ». Строковый литерал - это что-то еще; это конструкция в исходном коде C или C++, тогда как строка - это то, что существует во время выполнения программы. –