gpt4 book ai didi

c++ - vector 上的for循环,总是返回一个索引

转载 作者:行者123 更新时间:2023-11-30 00:46:03 26 4
gpt4 key购买 nike

我正在尝试重现问题以在 SO 中提出问题!但是我要创建的示例本身就有问题!

如下所示,我编写了一个简单的程序,它从用户那里接收 5 个元素并将它们放入 u_char vector 中。之后,我尝试打印 vector 的成员。

  #include <iostream>
#include <vector>
#include <stdint.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/ether.h>

int main(){
std::vector<u_char*> packets;
u_char packet[10];
std::cout << "Receiving Values :\n";
for(int i=0; i<5; i++){
std::cin >> packet;
packets.push_back(packet);
}

std::cout << "\n\n\nPrinting Values :\n";
for(auto p : packets){
std::cout << p << "\n";
std::cout << "------------\n";
}
return 0;
}

这是输出:

me@me-MS-7693:~/Desktop/test$ ./a.out 
Receiving Values :
aaaa
b
ccccc
ddd
ggggggg



Printing Values :
ggggggg
------------
ggggggg
------------
ggggggg
------------
ggggggg
------------
ggggggg
------------

为什么在输出中,我只收到最后一个成员?

最佳答案

发生这种情况是因为您将指向同一数组的指针插入指针的 vector 中。这有两个后果:

  • 所有条目都相同,并且等于最后一个条目,因为指针始终相同;数据没有被复制到 vector 中,只有指针,指针总是相同的,因为只有一个数组packet[10]
  • 一旦表示数组的局部变量超出范围, vector 的元素就会失效。这对您的示例程序来说不是问题,因为您只有一个函数,但在一个单独的函数中读取的程序中,这可能会导致未定义的行为。

要解决此问题,您需要将 vector 元素的类型更改为具有复制功能的类型,例如std::string.

关于c++ - vector 上的for循环,总是返回一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40056293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com