文件读取时,遇到的一点小知识

来源:互联网 发布:js时间戳转换成日期 编辑:程序博客网 时间:2024/04/30 09:50
memset(filename,0x00,sizeof(filename));
sprintf(filename,"%s/hxdata/cwyw.2501.%ld.dat",getenv("HOME"),g_pub_tx.tx_date);
fp=fopen(filename,"rb");
if(fp==NULL)
{
vtcp_log(LOG_ERR,"[%s] [%d]打开文件失败!!!filename=[%s]",__FILE__,__LINE__,filename);
vtcp_log(LOG_ERR,"[%s] [%d]数据文件 filename=[%s]   不存在 ",__FILE__,__LINE__,filename);
fclose(fp);
goto ErrExit;
}

memset(cLine,0x00,sizeof(cLine));

fgets(cLine,sizeof(cLine)-1,fp);/*1*/

vtcp_log(LOG_DEBUG,"[%s] [%d]获取的数据:strlen(cLine)=[%d]",__FILE__,__LINE__,strlen(cLine));

pub_base_strpack(cLine);/*2*/

vtcp_log(LOG_DEBUG,"[%s] [%d]获取的数据:strlen(cLine)=[%d]",__FILE__,__LINE__,strlen(cLine));

cLine[strlen(cLine)-1]='\0';/*3*/

vtcp_log(LOG_DEBUG,"[%s] [%d]获取的数据:cLine=[%s]",__FILE__,__LINE__,cLine);

-------------------------------------------

log

DEBUG:2015-04-29 11:51:14 922 [gDpjfb.c] [203]获取的数据:strlen(cLine)=[7]
DEBUG:2015-04-29 11:51:14 922 [gDpjfb.c] [205]获取的数据:strlen(cLine)=[7]
DEBUG:2015-04-29 11:51:14 922 [gDpjfb.c] [207]获取的数据:cLine=[ROWS:1]

------------------------------------------------------------------------------------------

cLine字符串明明是六个字节 为什么长度是七

今天看程序的时候,看到了这段 。strlen()是获取字符串长度的函数。遇到\0结束。

这时候从文件中读取一行//1

//2 去除字符串两端的空格

//3 问题来了 strlen() 获取字符串时 是从文件中读取的,所以文件的一行最后有换行符\n  

所以读取的长度为7,最后把\n换成了\0。


0 0
原创粉丝点击