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