簡體   English   中英

將2D數組和字符串向量作為參數傳遞給函數

[英]Passing 2D array and vector of string as argument to function

我編寫了兩個函數,其中我將字符串向量傳遞給特定函數(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);

在C ++中,不能有VLA(可變長度數組)。 由於數組arr的大小僅在運行時才知道,因此您不能將其用作固定大小的數組的大小。 您應該使用new來分配它。 例如

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

還要像這樣修改功能簽名

void PrintStringArray(const char *arr[]){

或像這樣

void PrintStringArray(const char **arr){

最后,請記住在完成后刪除arr

delete[] arr;
const char *arr[n]

這不是有效的聲明(除非n是常量表達式)。 C ++沒有可變長度數組。

“但是它在main內部對我有用!”

這是因為g ++實現了對C ++的擴展。 此擴展似乎與C可變長度數組不兼容,並且通常是錯誤的。 不要使用它。

“但是我怎么能擁有可比的功能呢?”

使用std::vector 除非您非常清楚為什么需要這些低級原語,否則不要使用指針, new[]delete[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM