局部变量 char数组,不是每次都重新分配的吗??

liang8305 liang8305 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
写程序的时候发现一个不太理解的现象,本来的目的是做一个监听,按时间把在线玩家的名字保存下来
结果类似:

时间段1,序号1,名字1
时间段1,序号2,名字2
时间段1,序号3,名字3
时间段2,序号1,名字1
时间段2,序号2,名字2
时间段2,序号3,名字3
时间段3,序号1,名字1
时间段3,序号2,名字2
时间段3,序号3,名字3


程序为:

//info:结果信息结构体
void RfC51GaugePlugin::UpdateScoring(const ScoringInfoV2 &info)
{

DWORD now=GetTickCount();
//保存间隔
if(now-lastSaveTime>saveDelay && info.mNumVehicles>0)
{

const unsigned int cusBufferSize = 50*1024;
char cpTemp[cusBufferSize];


//历遍在线玩家
for( long i = 0; i < info.mNumVehicles; ++i )
{
//玩家信息结构体
VehicleScoringInfoV2 &vinfo = info.mVehicle[ i ];

//字符串连接 : 时间段1,序号1,名字1 + "\n"+ 时间段1,序号2,名字2 ....
sprintf(cpTemp, "%s%d,%d,%s\n"
,cpTemp,GetTickCount()/1000,i
, vinfo.mDriverName);

}
saveLog(cpTemp);
}


}


多次调用这个方法,得到的结果是类似:
时间段1,序号1,名字1
时间段1,序号2,名字2
时间段1,序号3,名字3
时间段1,序号1,名字1 //时间段2里含有时间段1的"字符串"
时间段1,序号2,名字2
时间段1,序号3,名字3
时间段2,序号1,名字1
时间段2,序号2,名字2
时间段2,序号3,名字3
时间段1,序号1,名字1 //时间段3里含有时间段1和2的"字符串"
时间段1,序号2,名字2
时间段1,序号3,名字3
时间段2,序号1,名字1
时间段2,序号2,名字2
时间段2,序号3,名字3
时间段3,序号1,名字1
时间段3,序号2,名字2
时间段3,序号3,名字3


后来修改程序,每次先将cpTemp 清空,则程序正常
程序为 :

//info:结果信息结构体
void RfC51GaugePlugin::UpdateScoring(const ScoringInfoV2 &info)
{

DWORD now=GetTickCount();
//保存间隔
if(now-lastSaveTime>saveDelay && info.mNumVehicles>0)
{

const unsigned int cusBufferSize = 50*1024;
char cpTemp[cusBufferSize];

sprintf(cpTemp,""); //清空
//历遍在线玩家
for( long i = 0; i < info.mNumVehicles; ++i )
{
//玩家信息结构体
VehicleScoringInfoV2 &vinfo = info.mVehicle[ i ];

//字符串连接 : 时间段1,序号1,名字1 + "\n"+ 时间段1,序号2,名字2 ....
sprintf(cpTemp, "%s%d,%d,%s\n"
,cpTemp,GetTickCount()/1000,i
, vinfo.mDriverName);

}
saveLog(cpTemp);
}


}


我的问题是,难道每次 char cpTemp[cusBufferSize]; 的时候,cpTemp不都是新的吗?
怎么会还保存着上次的信息,切让本次 连接在上次的后面呢?

我试过
char *cpTemp=new char[cusBufferSize];
char *cpTemp=(char *)malloc(cusBufferSize);

也都不行,请c++朋友解答一下;
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
liang8305
C++ 语言 65,214 成员 250,514 内容