C++ 当字符指针被赋值为空值时,pragram给出错误?

C++ 当字符指针被赋值为空值时,pragram给出错误?,c++,C++,我有以下两个版本的代码 正确的工作程序 #include<iostream.h> #include<string.h> void main() { const char *q="+\0"; char *p=""; //working correct with "" strncpy(p,q,2); cout<<p; } #包括 #包括 void main() { 常量字符*q=“+\0”; char*p=”“;//正确使用“” strncpy(p,q,2)

我有以下两个版本的代码

正确的工作程序

#include<iostream.h>
#include<string.h>

void main()
{

const char *q="+\0";
char *p=""; //working correct with ""
strncpy(p,q,2);
cout<<p;
}
#包括
#包括
void main()
{
常量字符*q=“+\0”;
char*p=”“;//正确使用“”
strncpy(p,q,2);

cout程序中没有任何部分是正确的。包含字符串文本的内存不能修改,因此绝对不能复制到位置
p

您必须仅访问您个人为自己使用而获得的内存,如:

char p[500];
strncpy(p, "+\0", 2);    // OK, *p is yours

我相信你的意思是当p==NULL时(根据你的评论)

*p==NULL
仅表示
p
指向某个包含值
0
的地址

换句话说,
*p==NULL
p==NULL
是两件完全不同的事情

因此,如果您试图编辑
p
指向的内存,并且该内存是地址
0x0000
(也称为
NULL
),则几乎肯定会失败,因为您可能不拥有该内存


当我说own时,我的意思是你的程序已经在这个位置分配了内存。如果你写
char*p=new char;
,那么你的程序就会分配一些
sizeof(char)
字节的内存。现在如果你修改
*p
的值,这是可以的,因为你已经得到了内存(通过操作系统或其他方式)。

您正试图修改调用未定义行为的
字符串文本。
char p[500];
strncpy(p, "+\0", 2);    // OK, *p is yours