strcpy会把循环变量重置,怎么回事?

celltree001 2012-09-04 01:22:41
void test(){
char tmp[5];
char *times[5]={"20:00","09:40","13:05","24:00","00:00"};
float f_times[5]={0};
for(a=0;a<5;i++)
{
strcpy(tmp,times[i]);
printf("%d\n",i);
tmp[2]='.';
f_times[i]=atof(tmp);
}
}

为什么每次strcpy执行之后,i的值就变为0了?
环境:windows XP+gcc (TDM-2 mingw32) 4.4.1
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-09-04
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上!
赵4老师 2012-09-04
  • 打赏
  • 举报
回复
tmp[6]
无知者无谓 2012-09-04
  • 打赏
  • 举报
回复
很惊奇你怎么编译过去的?a i 都未定义,这什么样的编译器呀?
dhdahai 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

"20:00"总共是5个字符,加上结束符共6个,所以char tmp[6]才是正确的,否则变量被覆盖,结果难料。
[/Quote]

++
酱油党 2012-09-04
  • 打赏
  • 举报
回复
#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>

void test();
int main()
{
test();
system( "pause" );
}
void test()
{
char tmp[6] = {0};
char *times[5]={ "20:00" , "09:40" , "13:05" , "24:00" , "00:00" };
float f_times[5]={0};
for( int a = 0 ; a < 5 ; a++ )
{
strcpy( tmp , times[a] );
printf( "%d\n" , a );
tmp[2] = '.';
f_times[a] = atof( tmp );
}
}
图灵狗 2012-09-04
  • 打赏
  • 举报
回复
"20:00"总共是5个字符,加上结束符共6个,所以char tmp[6]才是正确的,否则变量被覆盖,结果难料。

33,311

社区成员

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

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