【发布时间】:2015-11-01 14:49:16
【问题描述】:
我编写了两个函数,其中我将字符串向量传递给特定函数(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);
【问题讨论】:
-
您的代码的另一个问题是,当您执行
arr[i] = str.c_str();时,您存储的内存地址由超出范围str的局部变量管理,这将导致未定义的行为。跨度> -
由于我没有更好的解决方案将字符串 str 分配给字符指针。我认为 c_str() 将 c++ 字符串转换为 c 字符串(由 char 数组组成)。
-
c_str()返回一个与 C 兼容的指针,但该指针仅在返回它的std::string对象存在时才有效。您在此之后使用它。