我是c++的新手,我仍然在努力解决指针的问题。
假设我有一个函数,它返回一个char*,指向一个字符数组/字符串的开头。
char* read() {
char data[] = "this for example";
return *data;
}
之后我想访问这些数据,但是我不认为我可以这样做:
char* data = read();
if(data[3] == 's')
return true;
在本例中使用read()
返回的数据的正确方法是什么?
在这种情况下,最好使用标准类std::string
std::string read()
{
char data[] = "this for example";
return data;
}
//...
std::string data = read();
if( data[3] == s )
return true;
至于你的代码片段,如果重写它没有错误,它会有未定义的行为,因为你返回一个指针到一个局部数组,将在退出函数后销毁。
在您的read()
函数中,return *data;
返回char
而不是 char*
。另外,在函数返回后不应该访问堆栈内存。让它静态。应该是:
char* read()
{
static char data[] = "this for example";
return data;
}
不能返回指向自动变量的指针。它调用未定义行为。动态分配data
。
char *data = new char[20];
使用
时,不要忘记删除分配的内存。delete[] data;
最好使用std::vector
或std::string
。