作为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() );