我正在尝试创建一个读取.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
为什么会这样?我怎样才能解决这个问题?感谢
答案 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++;
}
对不起,英语不是我的理由。希望它有所帮助!