如何在const char *上执行std :: find

时间:2013-08-11 16:37:31

标签: c++

我试图通过使用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 个答案:

答案 0 :(得分:9)

std::find return-type取决于你传递给它的内容。

lineconst char*,因此std::find将返回const char*,而非char*。所以写下这个:

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

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

希望有所帮助。

答案 1 :(得分:4)

成功

const char* pos = std::find(...);

答案 2 :(得分:3)

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

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

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

答案 3 :(得分:1)

Igor和Nawaz回答了你的问题,我只想补充一点,如果你的编译器允许C++11,那么你可以通过使用std::beginstd::end 来养成良好的习惯。标准库容器和数组(而不像我最初写的那样像这样的指针)。

const char line[] = "whatever accessible char array";
const char * pos = std::find(std::begin(line), std::end(line), space);