从char *访问数组元素

时间:2014-07-04 16:53:36

标签: c++ arrays string pointers

我是c ++的新手,我仍在努力解决整个指针问题。

假设我有一个函数返回一个指向字符数组/字符串开头的char *。

char* read() {

char data[] = "this for example";
return *data;
}

然后我想访问这些数据,但我认为我不能做这样的事情:

char* data = read();
if(data[3] == 's')
    return true;

在此示例中使用read()返回的数据的正确方法是什么?

3 个答案:

答案 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::vectorstd::string

答案 2 :(得分:1)

read()函数中,return *data;会返回char 而不是 a char*。函数返回后,也不应该访问堆栈内存。让它静止。它应该是:

char* read()
{
    static char data[] = "this for example";
    return data;
}