-1

我有以下两个版本的代码

正确工作的程序

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

void main()
{

const char *q="+\0";
char *p=""; //working correct with ""
strncpy(p,q,2);
cout<<p;
}

程序报错

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

void main()
{

const char *q="+\0";
char *p=NULL; //Program gives error abnormal termination when *p=NULL or *p="\0"
strncpy(p,q,2);
cout<<p;
}

我不理解 char *p这些代码示例中的两种不同行为。请帮忙。

4

2 回答 2

0

我相信你实际上是指什么时候p == NULL(来自你的评论)

*p == NULL只是意味着p指向某个持有该值的地址0

换句话说*p == NULL,和p == NULL是两个完全不同的东西。

因此,如果您尝试编辑p指向的内存,并且该内存是几乎可以保证失败的地址0x0000(也称为NULL),因为您可能不拥有该内存。

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

于 2013-11-10T11:29:41.817 回答
0

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

您只能访问您个人获得的供自己使用的内存,如下所示:

char p[500];
strncpy(p, "+\0", 2);    // OK, *p is yours
于 2013-11-10T11:06:53.220 回答