取数组内容不正确,求解

hisungao 2013-06-08 01:23:53
我先定义了一个2维数组,
char scomm[3][5]={
"0012",
"0034",
"0056",
"0078",
};
然后用
for (i=0;i<=3;i++)
strcpy(tmp,scomm[i]);
想将每一个数组的内容拷出来,结果不正确了,如果我想把scomm[1]的内容"0034"拷出来该怎么做,我拷出来成了" 003",前面多了数组0里面的结束那个符号,这样的错误是为什么?对多维数组的内容拷贝不是这样用的吗?菜鸟问题请多多指教,谢谢了.
...全文
233 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
hisungao 2013-06-20
  • 打赏
  • 举报
回复
是自己将数组少了一位搞出的毛病,非常感谢各位兄弟了.
hisungao 2013-06-13
  • 打赏
  • 举报
回复
我把附件传到其它地方了,兄弟们能帮忙看看问题吗? 试过用迅雷粘贴地址可以下载的.地址:http://www.amobbs.com/forum.php?mod=attachment&aid=MTE4MjA3fGU5ZjUxNDVhfDEzNzExMTU1ODF8Mjk2NDR8NTUzNzc1Nw%3D%3D 学习UCGUI的例子边学边改的,把#include "string.h"挪了几个地方后连scomm的内容都和原始的不同也乱了,把自己学习的代码贴上来,请兄弟们指点一二. 年纪大了记性不好在里面到处加标注,又是英文白痴的外行菜鸟,写的乱七八糟不规范还请见谅. 总感觉到象是用include包含出了错?刚开始的时候在第一个窗口中用strcpy(tmp,scomm);能循环得到全部正确的结果,只是在回调创建的窗口中使用strcpy(tmp,scomm)中tmp不能得到正确结果,我把#include "string.h"挪了地方再挪回来后tmp和scomm都不能得到正确结果了.试过下了个要序列号的vc++6.0也是这样的结果.中断放在Speed.c中的ID_BUTTON_14那下面进行拷贝的.求教各位兄弟指点.
hisungao 2013-06-13
  • 打赏
  • 举报
回复
不知道错误是在哪里了,不知道在那里可以上传附件,感觉好象是我在那个地方用错了,菜鸟一直没有搞明白.
zgl7903 2013-06-13
  • 打赏
  • 举报
回复
LPCSTR scomm[]={ "0012", "0034", "0056", "0078", };
  • 打赏
  • 举报
回复
应该不仅仅是你贴出的这几行代码的问题,如果scomm本身数据都错了,那只能怀疑是内存被扰乱了。 我在VC6和VS2008下用你的代码都没有复现你的问题。
  • 打赏
  • 举报
回复
从便于阅读的角度,数组最好定义为 char* scomm[4]; 循环条件最好写为 i < 4
hisungao 2013-06-10
  • 打赏
  • 举报
回复
请问19楼你的那个版本是哪个?还有那个

是怎么搞出来的?我这个是学习单片机的模拟,对ram还是能少节省一个就节省一个为好.
hisungao 2013-06-10
  • 打赏
  • 举报
回复
我试过,把tmp换成多大的组都是错的,是不是我的用的vc++有问题?英文白痴所以用的是那个所谓中文版.
  • 打赏
  • 举报
回复

我这一切正常啊?
  • 打赏
  • 举报
回复
char scomm[][5]就行 第二维方向必须指明长度,第一维不必 如果你了解过汇编语言你就知道为什么了 你把那个5换个10 内存有的是,别吝惜
信阳毛尖 2013-06-08
  • 打赏
  • 举报
回复
理论上没问题啊
schlafenhamster 2013-06-08
  • 打赏
  • 举报
回复
这样定义看看: char scomm[3][5]={ {"0012"}, {"0034"}, {"0056"}, };
hisungao 2013-06-08
  • 打赏
  • 举报
回复
从起程序后又成原来的死样子了,正如12楼兄弟所说,定义的是5位但每次取的时候只取了4位出来,把后面剩下的留给了下个数组, scomm[0]是‘0’‘0’‘1’‘2’ scomm[1]是‘\0’‘0’‘0’‘3’ scomm[2]是‘4’‘0\’‘0’‘0’ scomm[3]是‘5’‘6’‘\0’‘0’ 怎么成这样了呢?
  • 打赏
  • 举报
回复
char scomm[4][5]={ // 注意第一个方括号中是 4 "0012", "0034", "0056", "0078", }; char tmp[5]; // 注意这里是 5 for (i=0;i<=3;i++) strcpy(tmp,scomm[i]);
hisungao 2013-06-08
  • 打赏
  • 举报
回复
不知道怎么回事,刚才是每个数组只能取出来前四位数,现在有能取出来完整的了,但问题又变了,除了数组0的内容能拷出来,其它后面的数组内容死活用strcpy(tmp,scomm[i]);取不出来,成下面这样了,为什么会这样啊?
yaozhiyong110 2013-06-08
  • 打赏
  • 举报
回复
你看下scomm[0]是什么 会不会是0012的\0被拿去给scomm[1]了...
hisungao 2013-06-08
  • 打赏
  • 举报
回复
楼上的方法冒似也不行啊,我将scomm[4][4]用strcpy拷出来内容是正确的,但在后面将字符转换成数字的时候用atof(tmp)/10会溢出错误,以前请教过是数组定义为scomm[4][4]错误,没有了后面的‘\0’造成,现在定义为scomm[4][5]又出现这个问题,该怎么用才对呀?
笨笨仔 2013-06-08
  • 打赏
  • 举报
回复
这样定义试试

char scomm[][]={
   "0012",
   "0034", 
   "0056",
   "0078",
};
hisungao 2013-06-08
  • 打赏
  • 举报
回复

菜鸟还不懂是错误在哪里.
hisungao 2013-06-08
  • 打赏
  • 举报
回复
不好意思,那个是我写的时候表错了,实际上定义的是正确的,定义的是char scomm[4][5]在watch里面看scomm[1]内容 分别为‘\0’ ‘0’‘0’‘3’‘4’ 而不是scomm[1]‘0’‘0’‘3’‘4’‘\0’
加载更多回复(7)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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