char * p_one = "this is my first char pointer";
char * p_two= "this is second";
strcpy(p_one ,p_two);
考虑上面的代码。这给出了访问冲突错误。 所以请帮忙理解
- 当前
"this is my first char pointer"
字符串存储在内存中的哪里?堆或栈 - 为什么我需要在调用
strcpy
之前为 p_one 分配内存,即使它已经存储了第一个字符串。为什么"this is second"
字符串不能复制到同一位置? - 如果我在调用
strcpy
之前为 p_one 分配内存,那么 p_one 指向的"this is my first char pointer"
字符串会怎样?是否保留在内存中? strcpy
如何知道特定指针是否已分配内存?
最佳答案
- 实现定义(通常只读)内存。[引用 1]
- 只要不修改源字符串文字,就不需要。
- 如果给
p_one
分配内存,那么它会指向新分配的内存区域,字符串字面量可能会/可能不会留在内存中,但保证它在整个生命周期中都存活程序的字符串文字具有静态持续时间生命周期。[引用 2] - 它没有。用户有责任确保这一点。
好读:
[引用 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/