为什么char *没有复制到向量中但字符串被复制了?

时间:2016-10-15 09:57:59

标签: c++ string for-loop vector char

好的,我正在尝试找出问题,当我尝试下面的代码时:

#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 *不会存储在向量中但是字符串存储在向量中?

1 个答案:

答案 0 :(得分:3)

因为char *的向量将存储字符指针(字符数组的第一个字符的内存地址),而不是字符本身。存储字符的唯一地方是数组本身。但是&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;。由于s只定义了一次,它只有一个唯一的地址,而你的整个向量只包含具有相同地址值的指针。

请注意,在C ++中,数组的名称(也是一个char数组)将转换为指向其第一个元素的指针。