c - 在缓冲区中查找字符串

标签 c string sizeof strlen

此函数浏览添加到缓冲区中的字符串并搜索指定的字段。如果在缓冲区中找到该字段,则返回指向分配内容的指针。如果在缓冲区内未找到指定字段,则指向“?”的指针字符串已交付。

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

char buf[256] = "ID=1234 Name=Manavendra Nath Manav Age=30";

const char * get_info (const char *name)
{
    unsigned   nl;
    const char *p, *e;

    if(name!=NULL)
    {
        nl = strlen(name);
        for (p = buf, e = p + strlen(buf) ; p < e && p[0] ; p += strlen(p) + 1) {
            printf("p = %s\tname = %s\te = %s\n", p, name, e);
            if (strncmp (p, name, nl) == 0 && p[nl] == '=')
                return (p + nl + 1);
        }
    }
    return "?";
}

int main()
{
    printf("strlen(buf) = %d\n", strlen(buf));
    printf("%s\n", get_info("Nath"));
    return 0;
}

执行后,我总是得到 ? 作为输出,代码有什么问题?第二,建议将上面代码中的 strlen 替换为 sizeof 吗? sizeof(buf) 返回 256

manav@os-team:~/programs/test$ ./a.out
strlen(buf) = 21
p = Manavendra Nath Manav       name = Nath     e =
?

编辑:抱歉,我之前没有更新p[nl] == '='。如果缓冲区像 char buf[256] = "ID=1234 Name=Manavendra Nath Manav Age=30"; 然后 get_info("Name") 应该返回 Manavendra Nath Manav

最佳答案

只有当p[nl]等于'='时,循环内的return才能执行:

        if (strncmp (p, name, nl) == 0 && p[nl] == '=')
                                       ^^^^^^^^^^^^^^^

但是,您的字符串中没有 '=',因此总是执行最后的 return "?"

关于c - 在缓冲区中查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499144/

相关文章:

php - 如何将多维数组放入双引号字符串?

c++ - 获取 vector 的大小(以字节为单位)

php - 在 PHP 中从字符串的开头和结尾删除引号

c++ - C/C++ 静态库与动态库示例

c - 向变量追加新路径会使程序崩溃

c - OpenSSL 无法在后端加载证书

java - 如何从字符串中提取数字并获取整数数组?

c++ - 获取结构中元素的数量

c - sizeof 运算符返回奇怪的结果

c - 在 if 语句中,如果我给变量赋值,是否必须在 else 语句中再次执行?