现在的位置: 首页 > 综合 > 正文

字符数组用完后内容会被自动清空吗?

2013年12月09日 ⁄ 综合 ⁄ 共 1706字 ⁄ 字号 评论关闭

字符数组用完后内容会被自动清空吗?我定义2个字符数组
char a;
char b;

然后分别给他们赋值
char *ptr = NULL;
char str[]="HI1234";
ptr = str;
memcpy(a,ptr,2);
printf a;
memcpy(b,ptr+2,4);
printf a;

在第一次给字符数组a赋值后,打印a的内容是正确。
可是在给b赋值后,再打印a中的内容却是空的,

这是为什么?

难道字符数组用完后内存就被释放了吗?

怎么处理能使字符数组a被赋值后内容保持着,直到下次我再次给它赋值?

[ 本帖最后由 herocsz 于 2009-8-24 16:14 编辑 ]你这个牵扯问题太多了


字符串结尾、指针初始化、堆空间初始化原帖由 net_robber 于 2009-8-24 16:06 发表 http://bbs3.chinaunix.net/images/common/back.gif
你这个牵扯问题太多了


字符串结尾、指针初始化、堆空间初始化

我只是把程序简单写了一下,表达了一下意思。
主要问题还是字符数组为什么会被清空?哪里的问题呢? 谢谢!你把完整的代码扔出来

#in

我的vim老是在(后面添加一个0,咋回事?!急

clude <stdio.h>
#include <string.h>
int main( void )
{
char a;
char b;
char str[] = "HI1234";
char *ptr = NULL;

ptr = str;
memcpy( ahttp://www.guanyuelou.com/, ptr, 2 );
a = '\0';
printf( "%s\n", a );
memcpy( b, ptr + 2, 4 );
printf( "%s\n", a );
b = '\0';
return 0;
}


这样写没有问题

[ 本帖最后由 churchmice 于 2009-8-24 16:32 编辑 ]代码如下:
char Bsic;
char Rxlev;
char Arfcn;
char Cellid;
char Timeadv;
char Pwrlev;
char Rxq;
char Lac;
char Tch;

void DataRecv(const char *rxBuf)
{
char *ptr;

ptr = rxBuf;

ptr += 9;
memcpy(Bsic, ptr, 2);
printf("-1-bsic: %s\n", Bsic);

ptr += 2;
memcpy(Rxlev, ptr,4);
printf("-2-bsic: %s\n", Bsic);

ptr += 9;
memcpy(Arfcn, ptr, 4);
printf("-3-bsic: %s\n", Bsic);

ptr += 9;
memcpy(Cellid, ptr, 5);
printf("-4-bsic: %s\n", Bsic);

........

}

bsichttp://www.ittlw.com/的内容只有第一次是对的,其他打印的都是空

[ 本帖最后由 herocsz 于 2009-8-24 16:43 编辑 ]原帖由 churchmice 于 2009-8-24 16:27 发表 http://bbs3.chinaunix.net/images/common/back.gif
你把完整的代码扔出来

#include
#include
int main( void )
{
char a;
char b;
char str[] = "HI1234";
char *ptr = NULL;

ptr = str;
memcpy( a, ptr, 2 );
a = '\0' ...

可是打印出来就是有问题%s,
结束符。。。楼主需要思考一个问题,字符串以什么结尾

在你的case里面,你是否有考虑字符串结尾问题原帖由 net_robber 于 2009-8-24 17:19 发表 http://bbs3.chinaunix.net/images/common/back.gif
楼主需要思考一个问题,字符串以什么结尾

在你的case里面,你是否有考虑字符串结尾问题
不加 ‘\0’, 会导致字符数组中的内容为空吗?原帖由 herocsz 于 2009-8-24 17:23 发表 http://bbs3.chinaunix.net/images/common/back.gif

不加 ‘\0’, 会导致字符数组中的内容为空吗?
不会,但数组会非法访问其它内存

抱歉!评论已关闭.