将2D数组和字符串向量作为参数传递给函数

时间:2015-11-01 14:49:17

标签: c++ arrays arguments

我写了两个函数,其中我将字符串向量传递给特定函数(PrintStringVector)只是为了打印内容而在第二个函数中传递指针数组来打印内容。第一个函数工作正常但第二个一个是错误,它低于我的代码。

#include <cmath>
#include <stdlib.h>
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int n;

void PrintStringVector(vector<string> & v){


    for(int i=0;i<v.size();i++){ cout<<v[i]<<endl;}

}


void PrintStringArray(const char *arr[n]){

    for(int i=0;i<n;i++){ cout<<arr[i]<<endl;}



}

int main() {

    vector<string>  vec;                    
    cin>>n;
    const char *arr[n];

    for(int i=0;i<n;i++){
        string str;
        cin>>str; 
        vec.push_back(str);
        arr[i]=str.c_str();
    }

    PrintStringVector(vec);
    PrintStringArray(arr);


    return 0;
}

错误:

        vinod@vinod-Inspiron-3537:~/Documents/hackerrank$ g++       passing_vector_of_string_or_passing_2d_array.cpp 
        passing_vector_of_string_or_passing_2d_array.cpp:17:35: error: expected ‘,’ or ‘...’ before ‘arr’
        void PrintStringArray(const char* arr[n]){
                                           ^
        passing_vector_of_string_or_passing_2d_array.cpp: In function ‘void PrintStringArray(const char*)’:
        passing_vector_of_string_or_passing_2d_array.cpp:19:33: error: ‘arr’ was not declared in this scope
        for(int i=0;i<n;i++){ cout<<arr[i]<<endl;}
                                         ^
        passing_vector_of_string_or_passing_2d_array.cpp: In function ‘int main()’:
        passing_vector_of_string_or_passing_2d_array.cpp:40:25: error: cannot convert ‘const char**’ to ‘const char*’ for argument ‘1’ to ‘void PrintStringArray(const char*)’
        PrintStringArray(arr);

2 个答案:

答案 0 :(得分:2)

在C ++中,你不能拥有VLA(可变长度数组)。由于数组arr的大小仅在运行时已知,因此不能将其用作固定大小数组的大小。您应该使用new来分配它。 E.g。

const char **arr = new const char*[n];

同样修改此功能签名

void PrintStringArray(const char *arr[]){

或者像这样

void PrintStringArray(const char **arr){

最后记得在完成后删除arr

delete[] arr;

答案 1 :(得分:2)

const char *arr[n]

这不是有效的声明(除非n是常量表达式)。 C ++没有可变长度数组。

&#34;但它适用于我main!&#39;

那是因为g ++实现了对C ++的扩展。此扩展似乎与C可变长度数组不兼容,并且通常是错误的。不要使用它。

&#34;但我怎样才能拥有类似的功能?&#34;

使用std::vector。不要使用指针new[]delete[],除非您非常清楚为什么需要这些低级基元。