将 vector<char> buf(256) 转换为 LPCSTR?

Posted

技术标签:

【中文标题】将 vector<char> buf(256) 转换为 LPCSTR?【英文标题】:Convert vector<char> buf(256) to LPCSTR? 【发布时间】:2010-07-19 09:37:32 【问题描述】:

有没有办法转换上面的?

如果是最好的方法是什么?

我猜你可以遍历向量并分配给const char*,但我不确定这是否是最好的方法。

【问题讨论】:

有什么理由使用向量而不是字符串? ***.com/questions/1200188/… @DumbCoder:看到这个问题和GMan的第一条评论原因:***.com/questions/3279733/… 在变参函数里面,用的是vsprintf,不知道这里能不能用字符串... 您确定需要LPCSTR吗? Windows 中的 8 位字符串数据类型已过时且已弃用;请改用 UTF-16 字符串类型,例如 LPCWSTR 【参考方案1】:
std::string s(vec.begin(), vec.end());
// now use s.c_str()

我认为这应该是相当安全的。

【讨论】:

也许改用两个迭代器构造函数s(vec.begin(), vec.end())?似乎更地道一点。【参考方案2】:

也许您可以使用std::string 而不是std::vector&lt;char&gt;

我相信std::stringstd::vector&lt;char&gt; 相似,因此您可以以相同的方式使用它,并受益于它的附加功能。

如果是这样,std::string 有一个方法 .c_str(),它返回一个以 null 结尾的 C 字符串(const char*)。

【讨论】:

【参考方案3】:

你可以这样做:

std::string str(&myVec[0], myVec.size());

然后str.c_str() 将返回一个const char * 供您使用。但这是假设向量中的数据是空终止的。如果不是,则无法保证。

【讨论】:

只有不带大小参数的构造函数才要求字符串以空值结尾。【参考方案4】:

尝试简单

LPCSTR str = &vec[0];

向量已经包含 C 字符串所需的连续存储。但请注意vec 已经为空终止,并且vec 不能在str 仍在使用时被销毁。一般vec一旦不用就可以销毁,所以将指针存入vec是危险的,会导致崩溃。 OTOH,将指针作为参数传递可能没问题:

f(&vec[0]);  // f takes a LPCSTR parameter

【讨论】:

此外,只要保留更多内存,内存就可以移动,因此您必须确保在指针存在时不对向量进行操作。

以上是关于将 vector<char> buf(256) 转换为 LPCSTR?的主要内容,如果未能解决你的问题,请参考以下文章

将 vector<char> 传递给指针 char*

将 vector<char> 作为参数,然后转换为字符串

如何将 unsigned char[] 转换为 std::vector<unsigned char>

(C++)将string型vector中的元素复制到char型数组中。。出错!

c++如何将vector<char>转化成string

将 char* 转换为 std::vector