许多Windows API,例如GetModuleFileName等...将输出写入char * buffer。但是使用std :: string更方便。有没有办法让他们直接写入std :: string(或std :: wstring)的缓冲区?
抱歉我的英语不好。我不是母语为英语的人。 -_-
Taworn T。
答案 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说的那样,我不建议你直接写在那个缓冲区里。