2

我正在尝试通过使用 nmap 将文件映射到内存来提高纯文本阅读器的性能。目前我有一个接收 const char * 和该数组长度的函数。我需要在这个 char 数组上执行搜索。

这就是我目前拥有的

void parseVertex(
    const char * line, 
    unsigned int length, 
   std::vector<glm::vec3> & vertices)
{
    if(length == 0)
    {
        return;
    }

    char space = ' ';


    char * pos = std::find(line, line + length, space);
}

std::find产生错误:const char * 类型的值不能用于初始化 char * 类型的实体

正确的使用方法是std::find什么?

4

4 回答 4

9

std::findreturn-type 取决于您传递给它的内容。

lineconst char*,所以std::find会返回const char*,不是char*。所以写这个:

const char * pos = std::find(line, line + length, space);

同样,如果您通过char*,您将获得char*

希望有帮助。

于 2013-08-11T16:40:48.977 回答
4

做了

const char* pos = std::find(...);
于 2013-08-11T16:39:12.573 回答
3

您正在处理,const char*因此您无法将结果绑定到char*,它必须尊重const关键字。

因此,实现这一目标的正确方法是:

const char* pos = std::find(line, line + length, space);
  ^
于 2013-08-11T16:46:15.603 回答
1

Igor 和 Nawaz 回答了你的问题,我只是补充一点,如果你的编译器允许C++11,你会养成一个好习惯,将std::beginandstd::end 用于标准库容器和数组(而不是像我最初写的那样的指针)。

const char line[] = "whatever accessible char array";
const char * pos = std::find(std::begin(line), std::end(line), space);
于 2013-08-11T16:44:43.773 回答