用C语言读取INI文件,怎么实现

cnlaojie 2007-03-27 08:51:22
请问如何在UNIX环境下用标准C来读取INI文件?那位高手可以给出例子,小弟谢谢了!
...全文
1628 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnlaojie 2007-03-27
  • 打赏
  • 举报
回复
问题解决了,UNXIN下应该这么写:



#include "stdio.h"
#include "string.h"

static char tmpstr[1024];
char * GetInitKey(char *filename, char *title,char *key)
{
FILE * fp;
char tmpLine[1024];
int rtnval;
int i = 0;
int flag = 0;
char * tmp;
//static char tmpstr[1024];
char ch;

if ((fp = fopen( filename, "rb")) == NULL )
{
return "have no such file";
}
while (!feof(fp))
{
rtnval = fgetc( fp );
if ( rtnval == EOF )
{
break;
}
else
{
tmpLine[i++] = rtnval;

}
if ( rtnval == '\n')
{
tmpLine[--i]=0;
i=0;
tmp = strchr(tmpLine, '=');

if (( tmp != NULL )&&(flag == 1))
{

if (strstr(tmpLine,key)!=NULL)
{
strcpy ( tmpstr, tmp + 1 );

fclose ( fp );
return tmpstr;
}
}
else
{
strcpy(tmpstr,"[");
strcat(tmpstr,title);
strcat(tmpstr,"]");
if (strcmp(tmpstr,tmpLine)==0)
{
flag = 1;
}
}
}

}
fclose ( fp );
}

main()
{
char YCQH[20];

strcpy(YCQH,GetInitKey("gameconfig.ini", "Amount", "YCQH"));
printf(YCQH);
}


cnlaojie 2007-03-27
  • 打赏
  • 举报
回复
我测试了
if (( tmp != NULL )&&(flag == 1))
{
if (strstr(tmpLine,key)!=NULL)
{
strcpy ( tmpstr, tmp + 1 );
fclose ( fp );
}
}
这里没有执行丫!
cnlaojie 2007-03-27
  • 打赏
  • 举报
回复
我加了头文件,VC下是可以,我是在UNIX下。
祝云飞 2007-03-27
  • 打赏
  • 举报
回复
执行完后结果是sss
加上头文件string.h试试
cnlaojie 2007-03-27
  • 打赏
  • 举报
回复
有人知道么,在线等
cnlaojie 2007-03-27
  • 打赏
  • 举报
回复
我怎么编译通过以后,执行。没有出来值呢?什么也没有,也没有错误。

#include "stdio.h"

char * GetInitKey(char *filename, char *title,char *key)
{
FILE * fp;
char tmpLine[1024];
int rtnval;
int i = 0;
int flag = 0;
char * tmp;
static char tmpstr[1024];

if ((fp = fopen( filename, "r")) == NULL )
{
return "have no such file";
}
while (!feof(fp))
{
rtnval = fgetc( fp );
if ( rtnval == EOF )
{
break;
}
else
{
tmpLine[i++] = rtnval;
}
if ( rtnval == '\n')
{
tmpLine[--i]=0;
i=0;
tmp = strchr(tmpLine, '=');

if (( tmp != NULL )&&(flag == 1))
{
if (strstr(tmpLine,key)!=NULL)
{
strcpy ( tmpstr, tmp + 1 );
fclose ( fp );
return tmpstr;
}
}
else
{
strcpy(tmpstr,"[");
strcat(tmpstr,title);
strcat(tmpstr,"]");
if (strcmp(tmpstr,tmpLine)==0)
{
flag = 1;
}
}

}
}
fclose ( fp );
return "";
}

main()
{
char YCQH[20];
strcpy(YCQH,GetInitKey("gameconfig.INI", "GmaesAmount", "YCQH"));
printf(YCQH);
}

配置文件:
[GmaesAmount]
YCMS=15
YCQH=sss
YCQT=10
YCJW=5
iu_81 2007-03-27
  • 打赏
  • 举报
回复
添加#include "string.h"
iu_81 2007-03-27
  • 打赏
  • 举报
回复
#include "stdio.h"

char * GetInitKey(char *filename, char *title,char *key)
{
FILE * fp;
char tmpLine[1024];
int rtnval;
int i = 0;
int flag = 0;
char * tmp;
static char tmpstr[1024];

if ((fp = fopen( filename, "r")) == NULL )
{
return "have no such file";
}
while (!feof(fp))
{
rtnval = fgetc( fp );
if ( rtnval == EOF )
{
break;
}
else
{
tmpLine[i++] = rtnval;
}
if ( rtnval == '\n')
{
tmpLine[--i]=0;
i=0;
tmp = strchr(tmpLine, '=');

if (( tmp != NULL )&&(flag == 1))
{
if (strstr(tmpLine,key)!=NULL)
{
strcpy ( tmpstr, tmp + 1 );
fclose ( fp );
return tmpstr;
}
}
else
{
strcpy(tmpstr,"[");
strcat(tmpstr,title);
strcat(tmpstr,"]");
if (strcmp(tmpstr,tmpLine)==0)
{
flag = 1;
}
}

}
}
fclose ( fp );
return "";
}

main()
{
char YCQH[20];
strcpy(YCQH,GetInitKey("gameconfig.ini", "config", "YCQH"));
}

cnlaojie 2007-03-27
  • 打赏
  • 举报
回复
谢谢jixingzhong(瞌睡虫·星辰),我是下面这样写得,但是出错了,错误信息是:
UX:acomp: ERROR: "laojie_test.c", line 37: identifier redeclared: GetInitKey

请指教!

#include "stdio.h"

main()
{
char YCQH[20];
strcpy(YCQH,GetInitKey("gameconfig.ini", "config", "YCQH"));
}

char * GetInitKey(char *filename, char *title,char *key)
{
FILE * fp;
char tmpLine[1024];
int rtnval;
int i = 0;
int flag = 0;
char * tmp;
static char tmpstr[1024];

if ((fp = fopen( filename, "r")) == NULL )
{
return "have no such file";
}
while (!feof(fp))
{
rtnval = fgetc( fp );
if ( rtnval == EOF )
{
break;
}
else
{
tmpLine[i++] = rtnval;
}
if ( rtnval == '\n')
{
tmpLine[--i]=0;
i=0;
tmp = strchr(tmpLine, '=');

if (( tmp != NULL )&&(flag == 1))
{
if (strstr(tmpLine,key)!=NULL)
{
strcpy ( tmpstr, tmp + 1 );
fclose ( fp );
return tmpstr;
}
}
else
{
strcpy(tmpstr,"[");
strcat(tmpstr,title);
strcat(tmpstr,"]");
if (strcmp(tmpstr,tmpLine)==0)
{
flag = 1;
}
}

}
}
fclose ( fp );
return "";
}
jixingzhong 2007-03-27
  • 打赏
  • 举报
回复
读取INI文件的函数(C语言)


/*
* File: inifile.h
* Read INI File
*/
#ifndef _INIFILE_H_
#define _INIFILE_H_

#include
#include

/*
* char* GetInitKey(FileName, Section, Key)
* Return Key=>Value
* Ex:
*
* + [config]
* + dbhost=localhost
*
* strcpy(dbhost,GetInitKey("config.ini", "config", "dbhost"));
*/
char * GetInitKey(char *filename, char *title,char *key)
{
FILE * fp;
char tmpLine[1024];
int rtnval;
int i = 0;
int flag = 0;
char * tmp;
static char tmpstr[1024];

if ((fp = fopen( filename, "r")) == NULL )
{
return "have no such file";
}
while (!feof(fp))
{
rtnval = fgetc( fp );
if ( rtnval == EOF )
{
break;
}
else
{
tmpLine[i++] = rtnval;
}
if ( rtnval == '\n')
{
tmpLine[--i]=0;
i = 0;
tmp = strchr(tmpLine, '=');

if (( tmp != NULL )&&(flag == 1))
{
if (strstr(tmpLine,key)!=NULL)
{
strcpy ( tmpstr, tmp + 1 );
fclose ( fp );
return tmpstr;
}
}
else
{
strcpy(tmpstr,"[");
strcat(tmpstr,title);
strcat(tmpstr,"]");
if (strcmp(tmpstr,tmpLine)==0)
{
flag = 1;
}
}

}
}
fclose ( fp );
return "";
}
#endif //_INIFILE_H_

使用方法:

char dbhost[20];
strcpy(dbhost,GetInitKey("config.ini", "config", "dbhost"));

ini文件内容

[config]
dbhost=localhost

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧