读书人

最近发现很多关于常量字符串的!该如何

发布时间: 2012-03-09 21:42:54 作者: rapoo

最近发现很多关于常量字符串的!
char *p = "abcdefg " ( 等价于 const char *p = "abcdefg ")//初始化

是否等价于

char *p ;
p = "abcdefg "//赋值,我认为此时不是常量字符串了.我个人认为是不等价的,可书上说是等价的.未解
...........................................................
void main()
{
char p[10];
char *q;
strcpy(p, "abcdefg ");
q = strcat(p, "a ");
cout < <q < <endl;
}
或者
void main()
{
char p[10] = "abcdefg ";
char *q;
//strcpy(p, "abcdefg ");
q = strcat(p, "a ");
cout < <q < <endl;
}
都是正确的


但下面为什么是错误的?
void main()
{
char *p;
char *q;
p = "abcdefg ";//此时不是相当于赋值并且分配空间了么?如果说没有分配空间的话这样可以么p = new char[10];但这样输出是错误的,为什么?
//strcpy(p, "abcdefg "); 在此时不是和p = "abcdefg ";等价么?
q = strcat(p, "a ");
cout < <q < <endl;
}

[解决办法]
p = "abcdefg ";//此时不是相当于赋值并且分配空间了么?如果说没有分配空间的话这样可以么p = new char[10];但这样输出是错误的,为什么?
============================================
p只是个指针变量,4个字节的内存空间,new出来的p指向一块堆内存,这块堆内存可以修改

读书人网 >C++

热点推荐