是否有相同的方法在std :: string中执行CString :: GetBuffer?

时间:2010-12-26 10:49:33

标签: c++ string

许多Windows API,例如GetModuleFileName等...将输出写入char * buffer。但是使用std :: string更方便。有没有办法让他们直接写入std :: string(或std :: wstring)的缓冲区?

抱歉我的英语不好。我不是母语为英语的人。 -_-

Taworn T。

2 个答案:

答案 0 :(得分:4)

如果您使用的是C ++ 0x,则可以保证以下功能:

std::string s;
s.resize(max_length);
size_t actual_length = SomeApiCall(&s[0], max_length);
s.resize(actual_length);

在C ++ 0x之前,std :: string内容不保证在内存中是连续的,因此代码在理论上是不可靠的;在实践中,它适用于流行的STL实现。

答案 1 :(得分:0)

使用std::string::c_str()检索空终止的const char *std::string::data()也返回const char *,但可能不会以空值终止。

但是像zeuxcg说的那样,我不建议你直接写在那个缓冲区里。