c++ - 我可以使用指针来遍历字符串数组吗?

标签 c++ arrays string pointers vector

那里。 我现在正在学习C++ Primer。当我写一段程序时,关于指针的一些事情让我感到困惑。 下面程序的功能是将字符串读入一个 vector 并将 vector 复制到一个字符指针数组中。对于 vector 中的每个元素,分配一个新的字符数组并将 vector 元素中的数据复制到该字符数组中。然后打印字符串数组的内容。

这是我的一段代码:

vector<string> str_vector;
string str_temp;
while(getline(cin,str_temp)){
    str_vector.push_back(str_temp);
}

typedef const char *cptr;
cptr *cptr_array = new cptr[str_vector.size()];

cptr *p = cptr_array;

for(vector<string>::iterator iter = str_vector.begin(); 
    iter != str_vector.end(); iter++,p++){
    *p = (*iter).c_str();
}

cout<<"Output Char Array Element"<<endl;
cptr *q = cptr_array;
while(*q){
    cout<<*q<<endl;
    q++;
}

delete [] cptr_array;

当我运行程序时,它会在输出字符串数组后崩溃。 我可以使用以下代码来做同样的事情而不会发生任何崩溃。

cptr *q = cptr_array;
for(int i = 0; i < str_vector.size(); i++,q++){
    cout<<*q<<endl;
}

我只是想知道为什么上面的输出代码不能正常工作。非常感谢大家!

最佳答案

*q = cptr_array;
while(*q){

循环不仅会在遍历数组后取消对越界 q 的引用,而且您也无法使用 while(q) 进行测试,因为没有 nullptr数组末尾的哨兵。最简单的做法是在 cptr 中多分配一个元素,而不是保存指向所有字符串值的指针,然后将最后一个元素的指针值设置为 nullptr( 0).

关于c++ - 我可以使用指针来遍历字符串数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25468418/

相关文章:

c++ - Visual Studio 2013 Update 3 中的 C++/Zo 在哪里

c++ - CMake 无法从子文件夹中找到包含文件

c - 添加数组时出现段错误(核心转储)

java - 将括号添加到字符串中的字符序列

c++ - 无法使用enable_if和is_base_of来区分模板特化

c++ - 如何在 Windows 上设置 UDP 源地址

javascript - 将数组元素排列在一个组中

c - 为什么在声明可变大小的 C 数组时没有出现编译错误?

php - Unicode 字符串 PHP

java - 替换字符串中的提及