我试图通过使用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
的正确方法是什么?
答案 0 :(得分:9)
std::find
return-type取决于你传递给它的内容。
line
为const 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::begin
和std::end
来养成良好的习惯。标准库容器和数组(而不像我最初写的那样像这样的指针)。
const char line[] = "whatever accessible char array";
const char * pos = std::find(std::begin(line), std::end(line), space);