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