У меня есть указатель на символ.
char *ch;
char arr[100];
Теперь я хочу сохранить значение массива char ч указывает на в другом массиве прибытие.
Я хочу сохранить значение, на которое указывает ч навсегда, так что любая другая операция выполняется на ч не будет изменять исходное значение массива.
Может кто-нибудь сказать мне, как это сделать?
Если ch
содержит данные, скопируйте содержимое ch
,
memcpy(arr, ch, 100);
предосторожность: Это решение предполагает, что ch
ссылается на ячейку памяти не менее 100 байт.
Если ch
содержит строку, используйте следующее:
strncpy(arr, ch, 99);
arr[99] =0;
Если вы просто хотите скопировать содержимое массива (один блок памяти) в другой массив, вы можете использовать memcpy
:
memcpy(arr, ch, size);
где size
это размер массива, на который указывает ch
(в байтах).
Но так как это C ++, то используются контейнеры STL, такие как std::vector
вместо массивов в стиле C было бы более разумно ~> вместо копирования памяти вы будете создавать и копировать объекты, например:
std::vector<char> v(ch, ch + size);
Но так как вы упомянули, что ch
на самом деле возвращаемое значение strtok
, Обратите внимание, что «Каждый вызов strtok () возвращает указатель на строку с нулевым символом в конце, содержащую следующий токен»., Это означает, что вы можете использовать его для создания объекта типа std::string
:
std::string myStr(ch);
или еще лучше: избегайте использования C-стиля strtok
на первом месте. Увидеть: Разбить строку в C ++?
Если ты хочешь ch
ссылаться arr
но не сможет изменить его, тогда вы можете сделать
const char* ch;
char* arr;
ch = arr;
Это позволяет изменить содержимое, используя исходный массив, но не указатель. т.е .:
arr[0] = 'g'; // valid operation
ch[0] = 'g'; // compiler error; modifying a const