come come come,a q.

xxmv99 2010-04-11 04:45:52
来来来,一个问题:
struct _FILE_INFO_TYPE_
{
INT8U a_type:2;
INT8U b_type:3;
INT8U is_c:1;
INT8U is_d:1;
INT8U is_e:1;
} ;

struct _FILE_INFO_
{
struct _FILE_INFO_TYPE_ pfile_info_type;
INT8U a_name_len;
char *a_name;
char *b_name;
char *c_name;
char *d_name;
char *e_name;
struct _FILE_INFO_ *next;
};

INT8U Init_Info(void)
{
struct _FILE_INFO_ *add;

add = (struct _FILE_INFO_ *)AVMem_umalloc(sizeof(struct _FILE_INFO_));
if(add == NULL)
{
printf("malloc error!\n");
return 0;
}
add->a_name = (char *)AVMem_umalloc(16);

if(!add->a_name)
{
AVMem_free(add);
return 0;
}

sprintf(add->a_name,"%s","this is a demo.");

add->next = NULL;
....
}



这样写哪里不对,感觉不对,但说不上来。。你呢?
...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxmv99 2010-04-11
  • 打赏
  • 举报
回复
no body...
xxmv99 2010-04-11
  • 打赏
  • 举报
回复
哈哈,原来这样:

add->a_name = (char *)AVMem_umalloc(x);
这里x为8或者9时,成功后我相应的再memcpy 8或9个字符后就会在字符后自动添加2个随机字符。

不知表述清楚没有。
xxmv99 2010-04-11
  • 打赏
  • 举报
回复
是多出来的,在已知字符的后面。

char temp[] = "12345678";

sprintf(add->a_name,"%s","this is a demo.");
替换成
memcpy(add->a_name,temp,strlen(temp));

单步时在8后面还能看到\17\30这样的字符。
柯本 2010-04-11
  • 打赏
  • 举报
回复
字串变量内容如果是不可显示的字符,就用\数字表示,这个是正常的
xxmv99 2010-04-11
  • 打赏
  • 举报
回复
\17\30见得最多
编译器的问题还是调试器的假象?
柯本 2010-04-11
  • 打赏
  • 举报
回复
没什么问题.如果你加上所需头文件...
xxmv99 2010-04-11
  • 打赏
  • 举报
回复
谢谢上层的,free在后面,没有贴出来,3q。

add->a_name = (char *)AVMem_umalloc(16);
这个地方如果是8或者16,在sprintf(add->a_name,"%s","this is a demo.");执行后,
add->a_name的值会自动跟上2个字符,奇怪。。。+郁闷。。。
  • 打赏
  • 举报
回复
没看到正常free。

其他的能有什么不对、
xxmv99 2010-04-11
  • 打赏
  • 举报
回复
再等10分钟,,。,苦苦地
xxmv99 2010-04-11
  • 打赏
  • 举报
回复
没人坐,自己来。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧