fopen的逻辑小bug

新手上路,老鸟笑笑路过哦,谢谢!!!


前几天写了一段写文件的小程序。大致要求是这样的。从数据库将数据读出来,然后按照固定的格式写入文件,每个文件最多只能有固定行(可配置)。当一个文件写完之后需要另起一个文件,文件名中会有一个序列号,如,文件名如下:aaa.0000.dat




其中一段代码如下:

	FILE *fp = fopen(strFileNametmp.c_str(),"a+");
	if (fp == NULL)
	{
		return -1;
	}
	
	while(!osSel.eof())	
	{
		osSel >> a1 >> a2 >> a3 >> a4 >> a5 >> a6 >> a7 >> a8 >> a9 >> a10;
		int32 rv1 = snprintf(pbuff, sizeof(pbuff), format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);//format为文件格式字符串,如"%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;"
		if ( rv1 <= 0 )
		{
			return -1;
		}
		else
		{
			if ( rowCount++ >= MaxRowNumber)//MaxRowNumber是文件最大行数
			{
				rowCount = 0;//rowCount行计数器,记录当前文件行数
				fileCount++;//fileCount文件计数器,记录当前文件序列号
				strFileNametmp = m_strFileName;//文件名
				sprintf(buff,".%06d.dat", fileCount);
				strFileNametmp += buff;
				fclose(fp);
				fp = fopen(strFileNametmp.c_str(),"a+");
				if (fp == NULL)
				{
					return -1;
				}
			}
			fputs(pbuff,fp);
		}
	}
	
	fclose(fp);



不过,这段代码是有一个逻辑上面的BUG的,最后我找了好久才找出来的,亲,你能找出来么?在稍后的回复中会有bug分析的哦。嘿嘿。请允许俺卖个关子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值