字符数组用完后内容会被自动清空吗?我定义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
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’, 会导致字符数组中的内容为空吗?
不会,但数组会非法访问其它内存