【发布时间】:2018-06-20 10:32:40
【问题描述】:
假设我创建了一个 char *s = "something",然后我分配了另一个变量 s1 = s,s1 会获取 s 的内存引用还是会转到另一个内存块并复制 s 的“值”以便它具有单独参考?
【问题讨论】:
-
你在使用 C++ 吗?
-
不,我用的是 C 语言
-
是的,这就是我的意思,抱歉不清楚。
假设我创建了一个 char *s = "something",然后我分配了另一个变量 s1 = s,s1 会获取 s 的内存引用还是会转到另一个内存块并复制 s 的“值”以便它具有单独参考?
【问题讨论】:
假设您使用的是 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)
【讨论】:
在 C 中,没有字符串类型。 C 中的字符串只是字符数组。一个字符串变量被声明为char * 类型,它是一个指向char(数组)的指针。
因此,赋值s1 = s 只会将指针从 s 复制到 s1,即内存引用,而不是字符串数据的副本。
如果要复制字符串,可以使用strdup()函数,它会分配内存并将字符串数据复制到其中。之后记得free()内存。
【讨论】: