сохранить значение в массиве char, указанном указателем char

У меня есть указатель на символ.

char *ch;
char arr[100];

Теперь я хочу сохранить значение массива char ч указывает на в другом массиве прибытие.
Я хочу сохранить значение, на которое указывает ч навсегда, так что любая другая операция выполняется на ч не будет изменять исходное значение массива.

Может кто-нибудь сказать мне, как это сделать?

1

Решение

Если ch содержит данные, скопируйте содержимое ch,

memcpy(arr, ch, 100);

предосторожность: Это решение предполагает, что ch ссылается на ячейку памяти не менее 100 байт.

Если ch содержит строку, используйте следующее:

strncpy(arr, ch, 99);
arr[99] =0;
3

Другие решения

Если вы просто хотите скопировать содержимое массива (один блок памяти) в другой массив, вы можете использовать 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 ++?

3

Если ты хочешь ch ссылаться arr но не сможет изменить его, тогда вы можете сделать

const char* ch;
char* arr;

ch = arr;

Это позволяет изменить содержимое, используя исходный массив, но не указатель. т.е .:

arr[0] = 'g';  // valid operation
ch[0] = 'g';   // compiler error; modifying a const
0
По вопросам рекламы [email protected]