【问题标题】:String reference in the C languageC语言中的字符串引用
【发布时间】:2018-06-20 10:32:40
【问题描述】:


假设我创建了一个 char *s = "something",然后我分配了另一个变量 s1 = s,s1 会获取 s 的内存引用还是会转到另一个内存块并复制 s 的“值”以便它具有单独参考?

【问题讨论】:

  • 你在使用 C++ 吗?
  • 不,我用的是 C 语言
  • 是的,这就是我的意思,抱歉不清楚。

标签: c string memory


【解决方案1】:

假设您使用的是 C 而不是 C++,“字符串”实际上是一个指向字符的指针(可能实际上是一个字符数组,但形式上是“一个字符”)。因此,分配“字符串”就是分配指针,并且不会涉及(由所述指针)指向的内存副本。

char const* s = "whatev";
char const* s2 = s; // both s and s2 point to the same memory 
                // that "holds" the 'w' (followed by `hatev` and NUL character)

【讨论】:

    【解决方案2】:

    在 C 中,没有字符串类型。 C 中的字符串只是字符数组。一个字符串变量被声明为char * 类型,它是一个指向char(数组)的指针。

    因此,赋值s1 = s 只会将指针从 s 复制到 s1,即内存引用,而不是字符串数据的副本。

    如果要复制字符串,可以使用strdup()函数,它会分配内存并将字符串数据复制到其中。之后记得free()内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2015-08-06
      • 2017-04-14
      • 2016-02-04
      相关资源
      最近更新 更多