首页 > 解决方案 > 比较文件中的字符串和 C 中的 malloced 字符串

问题描述

我正在尝试遍历一个文本文件,并且对于每一行,检查一个使用内存分配创建的特定子字符串是否在其中。我的问题是,为了使 malloc 的字符串完好无损,我需要在其末尾添加 \0 。因为否则它会在最后包含一些乱码。这导致我对 strstr 的使用无关紧要,因为它搜索该字符串,但最后有一个额外的 \0 导致搜索失败。

int compare(char *X,char *Y,int size)
{
    while (size >0 && *X && *Y)
    {
        if (*X != *Y)
            return 0;
        X++;
        Y++;
        size--;
    }
    return (*Y == '\0');
}

char* substring(char* X, char* Y, int size)
{
    while (*X != '\0')
    {
        if (compare(X, Y, size))
        {
            printf("in\n");
            return X;
        }
        X++;
    }
    return NULL;
}

对于实际调用:

if (substring(temp, lua_name, strlen(lua_name)-1) != NULL)
{
  puts(temp);
}

例如:

payloadSubtree:add(roy_fields.my_data_req,buffer(offset,2))
my_data_req\0

我该如何解决这个问题?如何在迭代时忽略第二个字符串的 \0 以便在文件中找到它?

标签: cstringfunctionsubstring

解决方案


您可以使用strnstr代替strstr, 并搜索strlen(str)字符。


推荐阅读