将 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<char>
?
我相信std::string
与std::vector<char>
相似,因此您可以以相同的方式使用它,并受益于它的附加功能。
如果是这样,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?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 unsigned char[] 转换为 std::vector<unsigned char>