好的,我正在尝试找出问题,当我尝试下面的代码时:
#include <iostream>
#include <vector>
#include <stdint.h>
#include <string>
#include <Windows.h>
using namespace std;
int main(){
vector<char*> v;
char s[10];
std::cout << "Enter Values :\n";
for (int i = 0; i<5; i++){
cin >> s;
v.push_back(s);
}
std::cout << "\n\n\nPrinted Values :\n";
for (auto ss : v){
cout << ss << "\n";
cout << "------------\n";
}
system("pause");
return 0;
}
这是我收到的输出:
Enter Values :
aaaa
ssss
ddddd
ffff
errrr
Printed Values :
errrr
------------
errrr
------------
errrr
------------
errrr
------------
errrr
------------
但现在我将“char *”改为“string”:
#include <iostream>
#include <vector>
#include <stdint.h>
#include <string>
#include <Windows.h>
using namespace std;
int main(){
vector<string> v;
string s;
std::cout << "Enter Values :\n";
for (int i = 0; i<5; i++){
cin >> s;
v.push_back(s);
}
std::cout << "\n\n\nPrinted Values :\n";
for (auto ss : v){
cout << ss << "\n";
cout << "------------\n";
}
system("pause");
return 0;
}
现在,它将所有内容存储到向量中:
Enter Values :
aaaa
ssss
ddddd
ffff
errrr
Printed Values :
aaaa
------------
ssss
------------
ddddd
------------
ffff
------------
errrr
------------
我的问题是,为什么char *不会存储在向量中但是字符串存储在向量中?
答案 0 :(得分:3)
因为char *的向量将存储字符指针(字符数组的第一个字符的内存地址),而不是字符本身。存储字符的唯一地方是数组本身。但是&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;。由于s只定义了一次,它只有一个唯一的地址,而你的整个向量只包含具有相同地址值的指针。
请注意,在C ++中,数组的名称(也是一个char数组)将转换为指向其第一个元素的指针。