我有一个字符指针。
char *ch;
char arr[100];
现在我想将ch指向的 char 数组的值存储在另一个数组arr中。我想永久存储ch指向的值,这样在ch上执行的任何其他操作都不会修改数组的原始值。
谁能告诉我该怎么做?
我有一个字符指针。
char *ch;
char arr[100];
现在我想将ch指向的 char 数组的值存储在另一个数组arr中。我想永久存储ch指向的值,这样在ch上执行的任何其他操作都不会修改数组的原始值。
谁能告诉我该怎么做?
如果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() 的每次调用都返回一个指向包含下一个标记的以 null 结尾的字符串的指针。” ,这意味着您可以使用它来构造类型的对象std::string
:
std::string myStr(ch);
甚至更好:strtok
首先避免使用 C 风格。请参阅:在 C++ 中拆分字符串?
如果您想ch
引用arr
但无法修改它,那么您可以这样做
const char* ch;
char* arr;
ch = arr;
这使得内容仍然可以使用原始数组进行修改,但不能使用指针。IE:
arr[0] = 'g'; // valid operation
ch[0] = 'g'; // compiler error; modifying a const