精华内容
下载资源
问答
  • #include <stdio.h> #include <stdlib.h> #include <string.h> #define path "C:/Users/ZS/Desktop/test.ini" ...//实现读取配置文件一行,当行的开头为#时则跳过这行 void re...
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define path "C:/Users/ZS/Desktop/test.ini"
    
    //去除字符串的左右两端的空格
    char *s_trim(char *str);
    
    //实现读取配置文件的一行,当行的开头为#时则跳过这行
    void readline(char *buf, int size, FILE *fp);
    
    /* file 配置文件路径
     * sec 代表的是读取的是哪个配置
     * param 代表的是想要读取到的变量
     * value 将读取到的结果存入value
     * */
    int readini(const char *file, const char *sec, const char *param, char *value);
    
    int main()
    {
        char str[20];
        int ret = readini(path, "server", "maxvalue", str);
        printf("%s", str);
    }
    
    //去除字符串的左右两端的空格
    char *s_trim(char *str)
    {
        char *s = str;
        char *copied, *tail = NULL;
        if(str == NULL || *str == '\0')
            return str;
        if((str[0]  != ' ') && (str[strlen(str)-1] != ' '))
            return str;
        for(copied = str; *str; str++){
            if(*str  != ' ' && *str != '\t' && *str != '\r' &&  *str != '\n'){
                *copied++ =  *str;
                tail = copied;
            }
            else{
                if(tail)
                    *copied++ = *str;
            }
        }
        if(tail)
            *tail = 0;
        else
            *copied = 0;
        return s;
    }
    
    //实现读取配置文件的一行,当行的开头为#时则跳过这行
    void readline(char *buf, int size, FILE *fp)
    {
        char c;
        int i = 0;
        while((c = fgetc(fp)) != EOF && c != '\n' && c != '#') {
            if(i >= size)
                break;
            buf[i++] = c;
        }
        while(c != '\n' && c != EOF)
            c = fgetc(fp);
    }
    
    int readini(const char *file, const char *sec, const char *param, char *value)
    {
        FILE *fp = NULL;
        char buf[1024];
        char *s;
        if((fp = fopen(file, "r")) == NULL)
            return -1;
        while(!feof(fp)){
            memset(buf, 0, sizeof(buf));
            readline(buf, sizeof(buf), fp);
            s_trim(buf);
            if(buf[0] != '[')
                continue;
            for(s = buf+1; *s != ']'; s++);
            *s = '\0';
            s_trim(buf+1);
            if(strcmp(sec, buf+1) != 0)
                continue;
            while(!feof(fp)){
                memset(buf, 0, sizeof(buf));
                readline(buf, sizeof(buf), fp);
                s_trim(buf);
                if(buf[0] == '[')
                   break;
                if(buf[0] == '\0' || buf[0] == '#')
                    continue;
                for(s=buf; *s != '='; s++);
                *s = '\0';
                s_trim(buf);
                if (strcmp(param, buf) == 0) {
                    memcpy(value, s+1, strlen(s+1));
                    value[strlen(s+1)] = '\0';
                    fclose(fp);
                    return 0;
               }
            }
        }
        printf("%s read error!", param);
        fclose(fp);
        return -1;
    }
    

     

    展开全文
  • 用的streamreader读取文件数据,txt文件比较多,用streamwriter创建了一个合并所有txt文件的新txt文件,现在有个问题是我不要合并的每个txt文件的第一行,也就是stage0-11那一行,...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    4.5 我有个char*型指针碰巧指向一些int型变量,我想跳过它们。为什么((int*)p)++;这样的代码不行? 4.6 为什么不能对void*指针进行算术操作? 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出了...
  • o 5.3 我有个 char * 型指针正巧指向一些 int 型变量, 我想跳过它们。为什么如下的代码 ((int *)p)++; 不行? o 5.4 我有个函数,它应该接受并初始化个指针 void f(int *ip) { static int dummy = 5; ip = &...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    4.5 我有个char *型指针碰巧指向一些int型变量,我想跳过它们。为什么((int *)p)++; 这样的代码不行? 47 4.6 为什么不能对void *指针进行算术操作? 47 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示...
  • 4.5 我有个char *型指针碰巧指向一些int型变量,我想跳过它们。为什么((int *)p)++; 这样的代码不行? 47 4.6 为什么不能对void *指针进行算术操作? 47 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示...
  • 4.5 我有个char*型指针碰巧指向一些int型变量,我想跳过它们。为什么((int*)p)++;这样的代码不行?  4.6 为什么不能对void*指针进行算术操作?  4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出了...
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    4.3 我有个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行? . . . . . . . . . . . . . . 17 4.4 我有个函数,它应该接受并初始化个指针void f(int *ip) f static ...
  • 4.5 我有个char*型指针碰巧指向一些int型变量,我想跳过它们。为什么((int*)p)++;这样的代码不行? 4.6 为什么不能对void*指针进行算术操作? 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出了...
  • 4.5 我有个char *型指针碰巧指向一些int型变量,我想跳过它们。为什么((int *)p)++; 这样的代码不行? 76 4.6 为什么不能对void *指针进行算术操作? 76 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出...
  • 4.5 我有个char *型指针碰巧指向一些int型变量,我想跳过它们。为什么((int *)p)++; 这样的代码不行? 76 4.6 为什么不能对void *指针进行算术操作? 76 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出...
  • 处理包括读取文件,将其分成一行行的文字,然后将每行 解析成零或更多的符号。然后用已找到的符号字符串变量值 调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开 的第一个空白符号。跳过空白行。您可...
  • CETool(最新2013.8)

    热门讨论 2013-09-27 12:51:23
    2. 程序在次性加载完配置文件后,接着逐行去解析文件内容,遇到注释或者是格式不正确的跳过该行,配置文件有以下特点: (1)配置文件无大小限制,仅取决于物理内存大小,支持Unicode与ANSI编码的文件格式...
  • 2. 程序在次性加载完配置文件后,接着逐行去解析文件内容,遇到注释或者是格式不正确的跳过该行,配置文件有以下特点: (1)配置文件无大小限制,仅取决于物理内存大小,支持Unicode与ANSI编码的文件格式;...
  • python cookbook(第3版)

    2016-01-06 22:24:38
    4.8 跳过可迭代对象的开始部分 4.9 排列组合的迭代 4.10 序列上索引值迭代 4.11 同时迭代多个序列 4.12 不同集合上元素的迭代 4.13 创建数据处理管道 4.14 展开嵌套的序列 4.15 顺序迭代合并后的排序迭代...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    上面代码中,第一行是Linux发行版本号,第二行是内核版本号和登录的虚拟控制台,我们在第三行输入登录名,按“Enter”键在Password后输入账户密码,即可登录系统。出于安全考虑,输入账户密码时字符不会在屏幕上回显...
  • Dos命令大全

    2013-01-08 15:33:00
    处理包括读取文件,将其分成一行行的文字,然后将每行 解析成零或更多的符号。然后用已找到的符号字符串变量值 调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开 的第一个空白符号。跳过空白行。您可通过...
  • copy 路径文件名1 路径文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写份现存目录文件 copy c:srv.exe ipadmin$ 复制本地c:srv.exe到对方的admin下 copy 1st.jpg/b+2st.txt/a 3st....
  • 8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用Last_value来计算最小值 207 8.7 其他分析函数 207 8.7.1 Nth_value(11...
  • 8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用Last_value来计算最小值 207 8.7 其他分析函数 207 8.7.1 Nth_value(11...
  • --box x=[x] y=[y] w=[w] h=[h] l=[l] 项目标题起始列,起始,每最大字符数,最大菜单项数,菜单框线条宽度(像素); 注:w=0 表示水平居中。此时 w 应当在 x 之后; l=0 表示不显示菜单框; --help=[x]=[w...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    7.1.1 读取图像数据 201 7.1.2 加载图像文件 203 7.2 秘诀:从iPhone相册访问照片 205 7.2.1 使用图像拾取器 206 7.2.2 添加2.x支持 206 7.2.3 添加3.1支持 206 7.2.4 拾取视频 206 7.3 秘诀:选择和定制...
  • iPhone开发秘籍(第2版)--详细书签版

    热门讨论 2012-12-11 13:42:25
    7.1.1 读取图像数据 201 7.1.2 加载图像文件 203 7.2 秘诀:从iPhone相册访问照片 205 7.2.1 使用图像拾取器 206 7.2.2 添加2.x支持 206 7.2.3 添加3.1支持 206 7.2.4 拾取视频 206 7.3 秘诀:选择和定制...
  • LINGO软件的学习

    2009-08-08 22:36:50
    可以把集、集成员和集属性同C语言中的结构体作个类比。如下图: 集 ←→ 结构体 集成员 ←→ 结构体的域 集属性 ←→ 结构体实例 LINGO内置的建模语言是种描述性语言,用它可以描述现实世界中的一些问题,然后再...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

c语言读取文件跳过一行

c语言 订阅