【问题标题】:store value in char array pointed by char pointer将值存储在 char 指针指向的 char 数组中
【发布时间】:2013-09-28 17:03:09
【问题描述】:

我有一个字符指针。

char *ch;
char arr[100];

现在我想将 char 数组 ch 指向的值存储在另一个数组 arr 中。 我想永久存储ch所指向的值,这样在ch上执行的任何其他操作都不会修改数组的原始值。

谁能告诉我怎么做?

【问题讨论】:

    标签: c++ arrays pointers char char-pointer


    【解决方案1】:

    如果ch包含数据,复制ch的内容。

    memcpy(arr, ch, 100);
    

    注意:此解决方案假定ch 引用的内存位置至少为 100 字节。

    如果ch 包含字符串,请使用以下内容:

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

    【讨论】:

    • 我能得到ch的长度吗?因为在调用 strtok 函数后 ch 被引用为一个 char 数组
    • strncpy 函数会处理这个问题。但是,和其他人一样,如果可以的话,我会推荐使用String
    【解决方案2】:

    如果您只想将数组(单个内存块)的内容复制到另一个数组中,可以使用memcpy

    memcpy(arr, ch, size);
    

    其中sizech 指向的数组的大小(以字节为单位)。

    但由于这是 C++,使用诸如 std::vector 之类的 STL 容器而不是 C 样式的数组会更合理 ~> 而不是复制您将要构造和复制对象的内存,例如:

    std::vector<char> v(ch, ch + size);
    

    但是既然你提到ch实际上是strtok的返回值,请注意“每次调用strtok()都会返回一个指向包含下一个标记的空终止字符串的指针。” em>,意思是你可以用它来构造一个std::string类型的对象:

    std::string myStr(ch);
    

    甚至更好:首先避免使用 C 风格的strtok。见:Split a string in C++?

    【讨论】:

      【解决方案3】:

      如果您希望 ch 引用 arr 但无法修改它,那么您可以这样做

      const char* ch;
      char* arr;
      
      ch = arr;
      

      这使得内容仍然可以使用原始数组进行修改,但不能使用指针。即:

      arr[0] = 'g';  // valid operation
      ch[0] = 'g';   // compiler error; modifying a const
      

      【讨论】:

      • 这不是问题的真正含义。
      猜你喜欢
      • 2021-01-26
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多