[英]Detect quoted strings with fscanf
我想用C读取这样的文件内容:
foo="bar"
alice="bob"
fruit="pineapple"
我对与密钥alice关联的特定值感兴趣,但是没有周围的引号。 所以,我想要鲍勃 。
所以,我写了这样的东西
编辑:添加了键/值的printf
char key[20];
char value[20];
char output[20];
memset(key, 0, 20);
memset(value, 0, 20);
while(fscanf(fd, "%19[^=]=\"%19[^\"]\"", key, value) != EOF) {
printf("%s=%s", key, value);
if (strcmp(key, "alice") == 0) {
memset(output, 0, 20);
strncpy(output, value, 20);
break;
}
memset(key, 0, 20);
memset(value, 0, 20);
}
问题是strcmp永远不会返回0。因此,任何键和“ alice”之间的比较总是错误的。 我得到以下输出:
foo=bar
alice=bob
fruit=pinneaple
=pineapple
还测试了每个键的长度,以strlen表示,这是正确的。 除了最后一行,我得到了我所期望的。 所以,我不太了解...
这里有明显的错误吗? 我正在尝试调试代码,但是我使用的目标系统非常有限(openwrt),并且我无法访问gdb(实际上,代码是在另一台计算机上交叉编译的,因为我的目标是甚至没有编译器)。
任何帮助表示赞赏。
不要将scanf()
用于用户输入(即使它来自文件)。 更喜欢fgets()
。
您的直接问题是空白。
文件的内容包括'\\n'
。 '\\n'
包含在key
。
如果要继续使用fscanf()
尝试在转换字符串中添加一些空格:
while (fscanf(fd, " %19[^=]= \"%19[^\"]\"", key, value) == 2) /* ... */;
// ^ ^ (2nd one isn't as important)
另请注意,我更改了条件。 而不是根据EOF
测试,而是测试返回值为2
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.