从char*访问数组元素

Accessing array elements from char*

本文关键字:数组元素 访问 char      更新时间:2023-10-16

我是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::vectorstd::string