首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vector<string>还是vector<char *>?

vector<string>还是vector<char *>?
EN

Stack Overflow用户
提问于 2009-02-15 00:15:02
回答 7查看 18.9K关注 0票数 6

问题:

代码语言:javascript
复制
- `vector<string>` and `vector<char *>`?

  • 如何将数据类型:string的值传递给特定接受:

的函数

代码语言:javascript
复制
- `const char *`?

对于实例,

代码语言:javascript
复制
 vector<string> args(argv, argv + argc);

 vector<string>::iterator i;

 void foo (const char *); //*i

  • 我理解使用vector<char *>:我必须复制数据以及指针

编辑:

谢谢你的意见!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-02-15 00:22:45

这实际上与向量无关。

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

std::string是一个string类,它封装组成字符串的所有所需数据,以及分配和取消分配功能。

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

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

而且,由于许多C++以及char*标准库的一部分都期望使用string,所以string类具有返回char*c_str()函数。

票数 18
EN

Stack Overflow用户

发布于 2009-02-15 00:20:11

若要将string传递给预期的const char *,请使用stringc_str()成员,该成员返回以空结尾的字符串:

代码语言:javascript
复制
string s = "foobar";

int n = strlen( s.c_str() );
票数 3
EN

Stack Overflow用户

发布于 2010-12-21 07:48:59

char*实际上是一个指向char类型值的指针,它定义了可以和不能用该值完成的操作。您可以让一个int* numbernumber引用指向存储此值的内存块的指针,并假设它是一个int,并为该内存块锁定该类型。但是您可以在该内存块中存储一个char 'C',但是它会引发编译错误,因为它说您不能在该char上执行那些int函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/550035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档