5

问题:

  • 有什么区别

    • vector<string>vector<char *>
  • 我如何将 data type: 的值传递string给一个专门接受的函数:

    • const char *?

例如:_

 vector<string> args(argv, argv + argc);

 vector<string>::iterator i;

 void foo (const char *); //*i
  • 我理解使用vector<char *>:我必须复制数据以及指针

编辑:

感谢您的输入!

4

7 回答 7

17

这实际上与向量无关。

Achar*是一个指针,它可能指向也可能不指向有效的字符串数据。

Astd::string是一个字符串类,封装了构成字符串的所有必需数据,以及分配和解除分配功能。

如果您将std::string's 存储在向量中或其他任何地方,那么一切都会正常工作

如果存储 char 指针,则必须完成分配和释放内存的所有艰苦工作,并确保指针只指向有意义的字符串数据,并确定字符串的长度等等。

由于char*许多 C API 以及 C++ 标准库的一部分都期望使用 ',因此string该类具有c_str()返回char*.

于 2009-02-15T00:22:45.280 回答
3

要将 a 传递string给 expecting const char *,请使用string'c_str()成员,该成员返回一个以 null 结尾的字符串:

string s = "foobar";

int n = strlen( s.c_str() );
于 2009-02-15T00:20:11.090 回答
3

char*实际上是一个指向 type 值的指针char,它定义了该值可以做什么和不能做什么。您可以创建一个int* numbernumber引用指向存储该值的内存块的指针,并假设它是一个int并且将锁定该内存块的该类型。但是您可以将 a 存储char 'C'在该内存块中,但它会引发编译错误,因为它说您无法在该内存块int上执行这些功能char

于 2010-12-21T07:48:59.360 回答
1
foo(i->c_str());
于 2009-02-15T00:18:29.753 回答
1

来自http://www.cplusplus.com/reference/string/string/

字符串对象是一种特殊类型的容器,专门设计用于处理字符序列。

与传统的 C 字符串不同,C 字符串对象只是内存数组中的字符序列,C++ 字符串对象属于一个类,它具有许多内置功能,可以以更直观的方式对字符串进行操作,并且具有 C++ 容器常见的一些附加有用功能。

char*是一个字符的指针,仅此而已。

您可以使用c_str()传递所需的数据作为const char*

至于复制,如果您复制数据,您将有一个新的字符串位置,因此会有一个新的指针。

于 2009-02-15T00:20:31.417 回答
1

我会使用vector< string >,只是因为查找将基于价值而不是基于地址。但是,vector< char* >会更快,因此每个都有其优点。

于 2009-02-15T00:27:35.767 回答
0

vector<char *> 听起来是个坏主意!!除非您的程序在内存有限的系统中运行。

于 2013-03-21T09:01:25.730 回答