那里。 我现在正在学习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/