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));
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。