首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一个联合体的有关问题和sizeof的有关问题

2012-05-27 
请教一个联合体的问题和sizeof的问题?1.sizeof问题:C/C++ codechar *p12345sizeof(p) 结果为4,char p[

请教一个联合体的问题和sizeof的问题?
1.sizeof问题:

C/C++ code
  char *p="12345";  sizeof(p) 结果为4,  char p[]="12345";  sizeof(p) 结果为6

请问下上面p不都是地址吗?sizeof是如何区分是指针还是数组?
2.请教一个联合体的问题:

C/C++ code
union tag_u{    int b;    int i;    float f;    struct {        unsigned short len;        char buf[1];    } s;    char n[1];    struct {        int len;        int cap;        //fzobj **items;    } a;    struct {        char sorted;        int len;        int cap;        //struct keyval *items;    } d;    struct {        int num;        int gen;        //struct pdf_xref_s *xref;    } r;} ;

我的代码:
C/C++ code
    char *p="1235678098534909773409298340089230498";    tag_u *pu=(tag_u *)new char[sizeof(tag_u)+strlen(p)];    pu->s.len=strlen(p);    memcpy(pu->s.buf,p,3);    pu->s.buf[3]='\0';        cout<<pu->s.buf; //这里打印的是123,因为联合体长度限制只能打印123,请问如何打印出完整数据

请问我如何把一个超过buf的字符串放到buf中,并打印出来?

[解决办法]
我只知道sizeof指针和数组的问题:
首先,要知道指针变量:当定义一个指针变量的时候,不管这个指针变量保存的是何种类型的数据,请永远记住,指针永远是无符号长整型的,不管是何种指针,因为指针变量保存的是一个地址,永远是地址。而无符号长整型在32位机上是4字节,所以sizeof()一个指针永远是4.
对于:char p[]="12345";sizeof(p);来说,此处的p不能就直接说是指针,而是数组名,它代表的是这个数组的首地址,而对于这个C风格字符串,它是以‘\0’作为结束标志的,所以一共是6个字节。
[解决办法]
因为cout输出的时候碰到[\0]会结束的,所以你只能打出123。
[解决办法]
第一题,sizeof(p),p是指针,32位机,指针就是4字节。sizeof(静态数组),值就是静态数组的大小。
[解决办法]
如果你需要打出查过buf的字符串,需要在字符串中加上‘\0’结束符,而且调用memcpy的时候,需要传递整个buf的长度。。 你这样做很不安全。会覆盖buf后面的数据。。
[解决办法]
char p[]="12345";
sizeof(p) 结果为6
这个当中p是数组名,代表整个数组
char *p="12345";
sizeof(p) 结果为4,
这个p是"12345"的地址,"12345"返回一个指针

热点排行