C ++搜索文件名指向字符串strcmp错误的指针

问题描述 投票:0回答:2

我试图在文件夹中搜索文件名,所以这是我到达的代码,当我在strcmp中使用普通文本字符串“file.txt”时,它工作得很好但是当我将字符串更改为{to_string(ticketid) + ".txt"}时它不起作用并且它开始了向我展示这个错误

“没有用于调用strcmp的匹配函数”

这是正在运行的代码:

    DIR *dir;
    struct dirent *ent;
    if ((dir = opendir ("added/"))) {
        while ((ent = readdir (dir))) {
            if(strcmp (ent->d_name, "file.txt")==0)
                flag++;
        }
        closedir (dir);
    }

然后当我试图测试这个代码时,它没有用

       DIR *dir;
        struct dirent *ent;
        if ((dir = opendir ("added/"))) {
            while ((ent = readdir (dir))) {
                if(strcmp (ent->d_name, to_string(ticketid) + ".txt")==0)
                    flag++;
            }
            closedir (dir);
        }

任何人都可以帮助我如何做第二个代码工作,因为文件名链接到票证ID,这是一个“int”

c++
2个回答
1
投票

strcmp用于“C字符串”,而不是用于C ++ std::strings。

这比你想象的要简单:

if (ent->d_name == to_string(ticketid) + ".txt")

0
投票

您可以使用“file.txt”作为参数,因为它是const char[]类型的字符串文字,它衰减到const char*,这是函数所期望的。 to_string(ticketid) + ".txt"表达式为std::string类型,不能提供给strcmp函数。如果你想保持strcmp函数只需使用字符串.c_str()成员函数:

if(strcmp(ent->d_name, (to_string(ticketid) + ".txt").c_str()) == 0)

话虽这么说你应该更喜欢std::string到字符数组。

© www.soinside.com 2019 - 2024. All rights reserved.