c – 错误:无法将std :: vector>转换为std :: string *

作为C的新手,我试图在我的一个程序中创建一个简单的void函数来显示数组.但是标题中有错误.我认为这是一个问题,我试图用一个不同于函数参数的数组调用它.我不确定如何修改它.

#include <iostream>
#include <vector>

using namespace std;

void display_array(string arr[]){
    int i;
    for (i = 0; i < sizeof(arr); i++);
        cout<<arr[i];
}

int main()
{
    string current;
    std::vector<string> paths;

    cout<<"Input paths in the form 'AB'(0 to exit)";
    cin>>current;
    while (current != "0"){
        paths.push_back(current);
        cin>>current;
    }
    display_array(paths);
}

任何帮助表示赞赏.

最佳答案 函数display_array的表示法在C出现之前存在于C中,并且由于C向后兼容C,它也在C中编译.

不幸的是,这是相当危险的,因为直觉上,它会导致初学者像你一样犯错误.

实际上你可以用[] fpr替换函数中的指针,这样它就需要字符串*.并且大小也是指针的大小,而不是数组中未传入的元素数.

你的选择是传入指针和大小,或者在最后一个是“一个超过序列结束”的范围内的两个指针.

如果您使用的是C 03,则必须使用& arr [0]来获取第一个元素.在C 11中,您使用arr.data()作为方法,当向量为空时也可以安全地调用. (如果向量为空,则技术上& arr [0]是未定义的行为,即使您从未尝试取消引用此指针).

因此,一个允许您的代码在C 03中工作的更正:

void display_array(const string *arr, size_t size )
{
    int i;
    for (i = 0; i < size; i++) // no semicolon here..
       cout<<arr[i];
}

并称之为:

if( !paths.empty() )
      display_array( &paths[0], paths.size() );
点赞