c++ - 将字符串从 char 指针复制到 char 指针

标签 c++ pointers

char * p_one = "this is  my first char pointer";
char * p_two= "this is second";
strcpy(p_one ,p_two);

考虑上面的代码。这给出了访问冲突错误。 所以请帮忙理解

  1. 当前 "this is my first char pointer" 字符串存储在内存中的哪里?堆或栈
  2. 为什么我需要在调用 strcpy 之前为 p_one 分配内存,即使它已经存储了第一个字符串。为什么 "this is second" 字符串不能复制到同一位置?
  3. 如果我在调用 strcpy 之前为 p_one 分配内存,那么 p_one 指向的 "this is my first char pointer" 字符串会怎样?是否保留在内存中?
  4. strcpy 如何知道特定指针是否已分配内存?

最佳答案

  1. 实现定义(通常只读)内存。[引用 1]
  2. 只要不修改源字符串文字,就不需要。
  3. 如果给p_one分配内存,那么它会指向新分配的内存区域,字符串字面量可能会/可能不会留在内存中,但保证它在整个生命周期中都存活程序的字符串文字具有静态持续时间生命周期。[引用 2]
  4. 它没有。用户有责任确保这一点。

好读:
[引用 1] What is the difference between char a[] = ?string?; and char *p = ?string?;?
[引用 2] "life-time" of string literal in C

关于c++ - 将字符串从 char 指针复制到 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12470164/

相关文章:

c++ - 字符指针等于缓冲区加上缓冲区大小?

C 在函数中操作 "object"

c++ - Visual Studio Intellisense 无法识别括号初始化中的类成员

c++ - 使用 #define 作为标识符(函数名称)和字符串的预处理器语法

C++ 语法 : void CLASS functionName()?

c - 将双指针传递给函数

c++ - 使用 Copliens 1994 计数指针示例代码获取编译错误

c++ - 有什么方法可以知道哪些 header 自动包含在 C++ 中

c++ - 内置类型的构造函数初始化

c++制作链表的深层拷贝