我已經寫了兩個函數,我將字符串矢量傳遞給一個特定的函數(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;
}
ERRORS:
[email protected]:~/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);
與您的代碼的另一個問題是,你存儲的內存由管理的地址當y時,局部變量超出範圍'str' ou do'arr [i] = str.c_str();'這會導致未定義的行爲。 – pcarter
因爲我沒有更好的解決方案將字符串str分配給字符指針。我認爲c_str()將C++字符串轉換爲c字符串(由char數組構成)。 – Bam
'c_str()'返回一個C兼容的指針,但是這個指針只有在返回它的'std :: string'對象存在時纔有效。您在此之後使用它。 – pcarter