首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

strcpy会把循环变量重置,咋回事

2012-09-14 
strcpy会把循环变量重置,怎么回事?[codeC/C++]voidtest(){chartmp[5]char*times[5]{ 20:00 , 09:40

strcpy会把循环变量重置,怎么回事?
[code=C/C++]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);
        }
}[/code]
为什么每次strcpy执行之后,i的值就变为0了?
环境:windows   XP+gcc   (TDM-2   mingw32)   4.4.1

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

C/C++ code
#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 );    }}
[解决办法]
探讨

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

热点排行