gpt4 book ai didi

C读取conf文件

转载 作者:行者123 更新时间:2023-11-30 14:55:45 24 4
gpt4 key购买 nike

您好,当我尝试读取conf文件(逐行)时遇到问题

这是我的代码:

bool EndWith(const char* haystack, const char* needle)
{
bool rv = 0;
if (haystack && needle)
{
size_t needle_size = strlen(needle);
const char* act = haystack;
while (NULL != (act = strstr(act, needle)))
{
if (*(act + needle_size) == '\0')
{
rv = 1;
break;
}
act += needle_size;
}
}

return rv;
}
FILE *file2 = fopen ("config.conf", "r");
const size_t line_size = 300;
char* line = malloc(line_size);
while (fgets(line, line_size, file2) != NULL) {
puts(line);

if(EndWith(line, "toto")) {
puts("yes");
}
}

和我的conf文件:

vm.user_reserve_kbytes = 131072 toto
vm.vfs_cache_pressure = 100 toto
vm.zone_reclaim_mode = 0 toto

我的代码返回 2"is",但如果我的 conf 文件,如果我在第一行添加换行符,我会读取 3 行,并且我的代码返回 3"is"为什么?

我想返回 3"is",而不需要在我的conf文件的第0行中添加换行符

错误返回:

vm.user_reserve_kbytes = 131072 toto

yes
vm.vfs_cache_pressure = 100 toto

yes
vm.zone_reclaim_mode = 0 toto

正确的回车(添加换行符)

yes
vm.user_reserve_kbytes = 131072 toto

yes
vm.vfs_cache_pressure = 100 toto

yes
vm.zone_reclaim_mode = 0 toto
<小时/>

我测试了解决方案 Filip Kočica(感谢您的帮助),但我有同样的问题:

代码:

bool EndWith(const char* haystack, const char* needle)
{
if (haystack == NULL || needle == NULL)
{
return false;
}
const char* p;
if ((p = strstr(haystack, needle)) != NULL)
{
if (!strcmp(p, haystack + strlen(haystack) - strlen(needle)))
{
return true;
}
}
else
{
return false;
}
return false;
}



int main(int argc, char **argv)
{
FILE *file2 = fopen ("config.conf", "r");
const size_t line_size = 300;
char* line = malloc(line_size);
while (fgets(line, line_size, file2) != NULL) {
puts(line);

if (EndWith(line, "za"))
{
puts("it does.");
}

}



return 0;
}

我的文件config.conf:

vm.user_reserve_kbytes = 131072 za
vm.vfs_cache_pressure = 1001 za
vm.zone_reclaim_mode = 01 za

最佳答案

1]

它返回 2,因为最后一行不以换行符 \n 结尾。

每次调用 getline 时,它​​都会为您提供文件中的一行(如果还有另一行)。无需检查该行是否确实以 NL 字符结尾。只需计算 getline 没有返回 EOF 的次数。

使看跌期权脱离状态

while (fgets(line, line_size, file2) != NULL)
{
puts(line);
puts("yes");

if(EndWith(line, /*special strings*/ ))
{

}
}

2]

bool EndWith(const char* haystack, const char* needle)
{
if (haystack == NULL || needle == NULL)
{
return false;
}
const char* p;
if ((p = strstr(haystack, needle)) != NULL)
{
if (!strcmp(p, haystack + strlen(haystack) - strlen(needle) - 1))
{
return true;
}
}
else
{
return false;
}
return false;
}



int main(int argc, char **argv)
{
FILE *file2 = fopen ("config.conf", "r");
const size_t line_size = 300;
char* line = malloc(line_size);
while (fgets(line, line_size, file2) != NULL) {
if (EndWith(line, "za"))
{
puts("it does.");
}

puts(line);
}



return 0;
}

配置文件:

vm.user_reserve_kbytes = 131072 za
vm.vfs_cache_pressure = 1001 za
vm.zone_reclaim_mode = 01 za

输出:

it does.
vm.user_reserve_kbytes = 131072 za

it does.
vm.vfs_cache_pressure = 1001 za

it does.
vm.zone_reclaim_mode = 01 za

关于C读取conf文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45568267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com