关于字符串占用空间的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 13:56:55
#include<iostream.h>
main()
{
char *a;
a="abcd";
int b,c,d,e;
b=a[3];
c=a[4];
e=a[30];
cout<<b<<"\n";
cout<<c<<"\n";
cout<<e<<"\n";
}
请问a到底占用了多少个字符的位置?为什么a[4-10]都是0,再往后就是随机的数了?
刚开始char *a的时候分配给a的空间到底是多少啊?

a是指针,
你上面的代码没有分配空间。
仅仅是让a指向常量数组“abcd”;
你可以对比下下面:
char *a;
char c[]="abcd";
a=c;
唯一的不同是a指向的不是常量,而是变量(现在a指向c,c是数组变量)。

如果要给它分配的话应该这样
char *a;
a = new char[5];
strcpy(a, "abcd" );
cout<<a<<endl;
delete a;
这样会让a指向用new动态分配的含有5个字符的数组。
然后利用strcpy来赋值。

a只是一个指针,它只能指向某处地址。
建议你多看书多思考。

char*a;
那么a占用的就是4个字节——一个指针的长度;
sizeof(a)=4;
即使你 char*a = new char[100];
sizeof(a)仍然为4;

你代码中 直接给 a="abcd";相当于将a的值设置为了"abcd”的地址——在全局数据区。

a一共占了4个字节的位置,从4往后对a的索引都是不正确的,虽然C++程序编译的时候不会报错,但是这样使用a的下标是不合法的,严重时可能导致系统崩溃。你访问到的0或随机数,都是分配给别的进程或尚未分配的空间。