windows环境下fread使用时遇到的奇怪问题

使用C库函数fopen、fread进行文件的操作,是大家都熟悉的处理方式。但最近在公司的实际项目中发现了一个很奇怪也很有趣的现象。

公司的项目使用VC编写前置程序,对客户传来的报文进行字符集转码操作。在转码过程中使用了临时文件。问题出现在临时文件读取过程中。代码很简单:

	FILE *fp;
	//chenzw:test
	fp = fopen(utf8file,"r");
	if (fp == NULL)
	{
		ComLog(__FILE__,__LINE__,LEVEL_ERROR,"打开utf-8报文[%s]失败\n",utf8file);
		return -3;
	}

	char * utf8buff;
	int nlen;

	fseek(fp,0,SEEK_END);

	nlen = ftell(fp);

	//ComLog(__FILE__,__LINE__,LEVEL_DEBUG,"长度nlen[%d]",nlen);

	if (nlen <1 )
	{
		fclose(fp);
		//ComLog(__FILE__,__LINE__,LEVEL_ERROR,"utf-8报文[%s]为空\n",utf8file);
		return -4;

	}
	fseek(fp,0,SEEK_SET);

	utf8buff = (char *) malloc(nlen + 1);

	memset(utf8buff,0,nlen + 1);

	int rtnlen = fread(utf8buff,sizeof(char),nlen,fp);

由于客户每次只传来一条明细报文,

时间: 2024-10-05 23:54:59

windows环境下fread使用时遇到的奇怪问题的相关文章

【转】Windows环境下Android NDK环境搭建

原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设备.接口.驱动控制的应用开发,不得不使用到本文的NDK开发环境(基于Android源码或内核源码修改),开发语言使用C/C++,NDK开发更接近于Linux开发,需要更多关于Linux应用编程知识.本文就介绍一

Windows环境下Android NDK环境搭建

前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设备.接口.驱动控制的应用开发,不得不使用到本文的NDK开发环境(基于Android源码或内核源码修改),开发语言使用C/C++,NDK开发更接近于Linux开发,需要更多关于Linux应用编程知识.本文就介绍一下NDK环境搭建及基础编程思想. 本文演示环境:Windows 7 Ultimate+Cy

windows环境下通过c++使用redis

1.Windows下Redis的安装使用 Redis是一个key-value存储系统.Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.本文中,作者分享了在Windows下进行安装和使用Redis的技巧. Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sortedset --有序集合)

Windows环境下,用netstat命令查看某个端口号是否占用

目标:在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用. 操作:操作分为两步:(1)查看该端口被那个PID所占用;方法一:有针对性的查看端口,使用命令 Netstat –ano|findstr "<端口号>",如图,最后一列为PID.图中的端口号为1068,所对应的PID为3840. (a)图 方法二:查看所有的,然后找到对应的端口和PID. (b)图 第一幅图中的5列就是上面(a)图对应的5列 (2)查看该PID对应的进程名称. 方法一

第一部分:使用iReport制作报表的详细过程(Windows环境下)

提示:在有些板块,文中的图片看不到,建议到我的blog浏览文章:http://blog.csdn.net/jemlee2002/文章将会涉及3个方面的内容: 第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用 第三部分:使用Jasperreport作为报表控件开发Web报表应用 1.前言 在网络上可以搜索到很多使用iReport和Jasperreport配合实现各种报表任务的文章,但是我觉得很少有一篇(几乎没有)做一个比较详细的介绍如何使用iReport制作报表的全过程,我所

Windows环境下IOS APP打包上传AppStore详细流程

现在很多伙伴跨平台开发应用,有些童鞋没有准备苹果机,本文将介绍,如何在Windows系统环境下直接上架APP,不用去搞虚拟机,搞黑苹果等等了,Windows下照样轻轻松松上架iOS APP,没Mac的小伙伴有福了. 下面从七个步骤进行详细介绍! 1.创建唯一标示符App IDs 2.申请发布证书 3.申请发布描述文件 4.iTunes Connect创建App并填写信息 5.选择证书编译打包6.Windows下上传IPA到App Store 7.上传好IPA回到iTunes Connect提交审

PHP.6-PHP环境搭建(Windows环境下)-LAMP

PHP环境搭建(Windows环境下)-LAMP Windows系统上分别独立安装Apache2.PHP5.MySQL5和phpMyAdmin等几个软件.独立安装的好处是可以自由选择这些组件的具体版本,清晰地掌握自己计算机里都安装了哪些程序,以及它们的具体配置情况,这将对以后的系统维护和软件升级工作带来很大的帮助. 获取软件 [可自行下载最新版进行安装] 软件名称 下载地址 apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi http://httpd.apa

windows 环境下安装wampserver2.5 64位

windows 环境下安装wampserver2.5 64位 出现的问题如下: 1.安装成功后修改mysql root 密码 (开始密码默认为空) 1.打开 mysql控制台 2.use mysql 3.update user set password=password(新密码) where user='root'; 4.flush privileges; (使修改的密码生效) 5.quit 退出控制台 2.配置apache 单IP 多站点 (开启虚拟机访问多站点) 1.找到httpd.conf

windows环境下 生成git公钥和私钥

windows环境下 生成公钥和私钥 上传代码到远程仓库的时候需要秘钥进行验证是否本人上传的.打开Git目录下的Git Bash 输入ssh-keygen,回车 可直接不输入路径,使用默认路径(c/Users/Administrator/.ssh/) 按照提示要输入两次密码,但是如果输入了,每次操作操作git库时都要输入密码,所以选择不输入密码 密码输入结束后,提示已生成秘钥 打开c:/Users/Administrator/.ssh/,在文件中,id_rsa是私钥文件,id_rsa.pub是公