文件读取返回重复两次

时间:2015-08-11 01:46:58

标签: c

我正在尝试创建一个读取.txt文件的函数,并返回特定给定行的行值。

我的问题是当我设置变量来存储配置文件的第一行和第二行时,它只返回变量的第二行。

我的功能:

char *get_config(char *fileName, int lineNumber, char *dst, int dstlen)
{

FILE *file;
file = fopen(fileName, "r");
int count = 0;

if (file != NULL)
{
    static char singleLine[150];
    while (fgets(singleLine, sizeof singleLine, file) != NULL)
    {
        if (count == lineNumber - 1)
        {
            char *line;

            if ( (line=strchr(singleLine, '\n')) != NULL)
            {
                *line = '\0';
                strncpy(dst, singleLine, dstlen);
            }
            //strcpy(dst, singleLine); // NOT SAFE!!! should use strncpy
            strncpy(dst, singleLine, dstlen);

        }
        else
        {
            count++;
        }
    }
} 
else 
{
    printf("Configuration file is empty.");
}

fclose(file);

}

这就是我调用函数的方式:

int main(){
    char server_url[150];
    char api_key[150];

    get_config("config.txt", 1, server_url,  sizeof server_url);
    get_config("config.txt", 2, api_key,  sizeof api_key);

    printf("%s\n", server_url);
    printf("%s\n", api_key);
}

config.txt文件:

asdasdsad
http://172.30.20.105:8000/service/logs
6aa2afd2-ab74-43df-87ed-460441d4a5ad

输出:

deojeff@linux:~/DeojeffFolder/rms-datalogger$ ./read_config 
6aa2afd2-ab74-43df-87ed-460441d4a5ad
6aa2afd2-ab74-43df-87ed-460441d4a5ad

为什么会这样?我怎样才能解决这个问题?感谢

1 个答案:

答案 0 :(得分:3)

我不明白为什么你的get_config函数返回一个指向char的指针,但是,我看到两种解决问题的方法而不重写循环:

添加break;

    while (fgets(singleLine, sizeof singleLine, file) != NULL)
    {
        if (count == lineNumber - 1)
        {
            char *line;

            if ( (line=strchr(singleLine, '\n')) != NULL)
            {
                *line = '\0';
                strncpy(dst, singleLine, dstlen);
            }
            //strcpy(dst, singleLine); // NOT SAFE!!! should use strncpy
            strncpy(dst, singleLine, dstlen);

            break;
        }
        else
        {
            count++;
        }

    }

或者在条件之外移动count的增量:

    while (fgets(singleLine, sizeof singleLine, file) != NULL)
    {
        if (count == lineNumber - 1)
        {
            char *line;

            if ( (line=strchr(singleLine, '\n')) != NULL)
            {
                *line = '\0';
                strncpy(dst, singleLine, dstlen);
            }
            //strcpy(dst, singleLine); // NOT SAFE!!! should use strncpy
            strncpy(dst, singleLine, dstlen);
        }
        count++;
    }

对不起,英语不是我的理由。希望它有所帮助!