long类型如何转变为char类型?为什么数组带不出来结果呢?

f2081 2014-01-02 09:29:32
int	*sql_int_field_len_bit=new	int[fields_bind_count*sizeof(int)];
char *sql_char_field_len_bit=new char[fields_bind_count*sizeof(int)];
//----------存放每个字段长度的数组
//int sql_int_field_len[fields_bind_count];//={0};
//char sql_char_field_len[fields_bind_count];//={0};
int *sql_int_field_len=new int[fields_bind_count*sizeof(int)];
char *sql_char_field_len=new char[fields_bind_count*sizeof(int)];
char *s=new char[10];
for(i=0;i<fields_bind_count;i++)
{
//---生成记录行字符串的总长度
all_sql_len=all_sql_len+(*sql_long_field_len[i]);
/---保存单个记录的长度
sql_int_field_len[i]=*sql_long_field_len[i];
//strncpy(sql_char_field_len+i,(const char *)sql_long_field_len[i],sizeof(long));
itoa(sql_int_field_len[i],&sql_char_field_len[i],10);
//ltoa(*sql_long_field_len[i],s,10);
//itoa((int)&sql_long_field_len[i],s,10);
//strncpy(&sql_char_field_len[i],s,strlen(s));//指针给数组赋值不能用"="符号,只能使用strncpy的方式
//strncpy(&sql_char_field_len[i],(const char*)sql_long_field_len[i],2);
if(i==12)
{
//MessageBox(NULL,&sql_char_field_len[12],NULL,MB_OK);
}
//---保存单个记录长度的位数(bit)
sql_int_field_len_bit[i]=strlen(s);
itoa(sql_int_field_len_bit[i],s,10);
strncpy(&sql_char_field_len_bit[i],s,strlen(s));//指针给数组赋值不能用"="符号,只能使用strncpy的方式
//错的sql_char_field_len_bit[i]=*s;
//---生成最终的记录行的字符串总长度
all_sql_len=all_sql_len+sql_char_field_len_bit[i]+1;//1就是用来记录位数(bit)占用的长度
}
MessageBox(NULL,&sql_char_field_len[2],NULL,MB_OK);//s


1、问题是这样的。不论是静态数组sql_char_field_len等还是动态的申请数组。从while循环出来以后,的messagebox的值都是一个随机数,不是想要的值。为什么?数组成员的内存被覆盖了吗?
2、上面的功能,其实就是将long类型转换为char类型,组成char的字符串,怎么做呢?
谢谢
...全文
242 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
f2081 2014-01-17
  • 打赏
  • 举报
回复
谢谢。我采纳意见
勉励前行 2014-01-04
  • 打赏
  • 举报
回复
1、 sql_char_field_len 是一个char* &sql_char_field_len[2] 是第3个字符的位置,并非第3个整数所对应的字符串开始位置。 2、 你的程序不容易看懂,思路有些乱,命名也不算好。这时候,整理一下原始数据与目标数据,中间过程先不用管,把原始数据与目标数据整理出来后,往往程序就很容易写了。
f2081 2014-01-04
  • 打赏
  • 举报
回复
怎么没有人来了呀
f2081 2014-01-03
  • 打赏
  • 举报
回复
请帮我看看,最后一句MessageBox(NULL,&sql_char_field_len[2],NULL,MB_OK); 获得的数组内容不是for循环中的内容了。为什么会这样呢?我至今找不到原因
f2081 2014-01-03
  • 打赏
  • 举报
回复
谢谢。我再看看。
勉励前行 2014-01-02
  • 打赏
  • 举报
回复
2、上面的功能,其实就是将long类型转换为char类型,组成char的字符串,怎么做呢? 大概可以这样: 一个 int 4字节,一个 char 1字节 ,win下 long 也是4字节 要把 long 转成10进制字符串,需要10字节安全(9字节+1字节分隔符),最后还得加1字节NULL结束符。 const int len = 1000*1000 ; int *Vint = new int[len]; char *str = new char[10*len]+1 ; char *p = str ; char buff[10]; buff[9] = 0 ; for(int i = 0 ; i < len ; ++i) { itoa(Vint[i],buff,10); int L = strlen(buff); memcpy(p,buff,L); p += L ; } *p = 0 ;
  • 打赏
  • 举报
回复
使用联合体试试

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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