toCharArry нюансы работы.

mahatm
mahatm аватар
Offline
Зарегистрирован: 15.10.2015

Нигде нет инфы, что в точности происходит, если скажем я указываю длину массива для .toCharArry в десять символов, а переменная String содержит скажем сто символов. Поэтому вопрос, - как в точности, происходит данное преобразование? Берется каждый следующий символ, и помещается в масив, в ячейку +1, n раз, где n - указанный размер массива?

И если не влом, - как наиболее простым способом, разбить переменную класса String заданной, четко известной длинны(ну пусть 17 символов), на скажем три последовательно заполненных массива типа char длинной 12,2,3?

Нагляднее:

String Ы="XXXXXXXXXXXXYYZZZ"    <-- получаем на входе.

Char ПервыйМасив[12]     <-- Должен получить из стринга все X

Char ВторойМасив[2]  <-- Все Y

Char ТретийМасив[3] <-- Все Z

И предвосхищая вопросы, полная задача,--получить на выходе масив переменных Int спарсенных из полученной String.

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Кто или что мешает открыть текст toCharArray и псомотреть? Там кода меньше, чем Вы тут текста написали. Вот он

void toCharArray(char *buf, unsigned int bufsize, unsigned int index = 0) const {
	getBytes((unsigned char *)buf, bufsize, index);
}

А вот текст getBytes

void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const {
	if (!bufsize || !buf) return;
	if (index >= len) {
		buf[0] = 0;
		return;
	}
	unsigned int n = bufsize - 1;
	if (n > len - index) n = len - index;
	strncpy((char *)buf, buffer + index, n);
	buf[n] = 0;
}

Вот и всё. Ни хрена там больше нет. Изучайте.

----------------

Другое дело, зачем Вам копировать в массив? Память девать некуда?  Почему не воспользоваться массивом, который уже хранится в строке прямо на месте?