C 文本解析器无法识别单词

标签 c parsing

我正在尝试使用 C 程序对文本进行简单的解析。我编写的函数应该检查保存有一行文本的缓冲区,并查看该行是否包含 BOL 处的特定单词。

输入参数是:

  • size:sizeof(word),在调用函数之前计算。
  • buf:包含正在解析的文本中的一行的缓冲区。
  • word:函数在 BOL 中查找的单词。

代码如下:

#include <stdio.h>
#include <string.h>

int strchk(int size, const char buf[1024], char *word) {
    char a[size];

    int i;
    for (i = 0; i < size - 1; i++) {
        a[i] = buf[i];
    }
    if (strcmp(a, word) == 0)
        return 1;
    else
        return 0;
}

问题是由于某种原因,某个单词无法被识别。之前的单词已被相同的函数正确识别。下面是调用该函数的两个上下文,第一个会导致正确的识别,第二个则不会,而文本在文本内不同行的开头包含这两个单词。

char c[] = "|conventional_long_name";
if (strchk(sizeof(c), buf, c)) {
    fputs("    conventional_long_name: \"", stdout);
    getdata(buf, c, sizeof(c));
}

char d[] = "|official_languages";
if (strchk(sizeof(d), buf, d)) {
    fputs("    religion: \"", stdout);
    getdata(buf, d, sizeof(d));
}

当我首先在 strchk() 函数中检查字符串 a 的大小时,它给出的大小为 20,但是如果我让它打印出字符串,它会告诉我它实际上是 |official_languagesfici。当您计算字符数时,它与前面提到的 |conventional_long_name 一样长,这表明该函数调用中的某些参数在下一个函数调用中起作用,我只是无法弄清楚我在哪里犯了错误。任何帮助将不胜感激。

最佳答案

您需要在函数strchk中设置a数组的空终止符。

使用它来实现

a[size - 1] = '\0';

for循环之后。

<小时/>

注释:

关于C 文本解析器无法识别单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35107503/

相关文章:

javascript - 如何为pegJS定义递归规则

c - 如何限制只能输入一个字母?

c - mmap 设备并访问它设备的内存映射

c - 我正在尝试根据给定的出生日期和 c 中的当前日期计算年龄

python - dateutil 解析器用于月/年格式 : return beginning of month

Python:使用 lineno 引发 SyntaxError

c++ - 通过 Cortex-M3 访问 USB 网络摄像头

c - 在 Win32 TIB 中保存数据

c++ - 为什么 _tcstod 在解析字符串时使用我的 Windows 区域设置?

java - 在 Java 中解析伪 XML 文件