可以让 STL string::c_str() 在没有字符串时返回 NULL 吗?
我的项目有遗留库,它将 NULL 指针视为空字符串。
但是当我像这样从 std::wstring 获取返回数据时,
std::wstring strData;
const wchar* pStr = strData.c_str();
ASSERT(NULL == pStr); // ASSERT!!
pStr 不是 NULL,而是 wstring 指向的指针。
当 std::string 没有字符串数据时,我可以让它返回 NULL 吗? 现在我像这样包装每个 str 成员变量:
const wchar* GetName() { // I hate this kinds of wrapping function
if (m_Name.empty())
{
return NULL;
}
return m_Name.c_str();
}
我的工作环境是 Windows 中的 Visual Studio 2008 sp1
提前致谢。
My project has legacy library which consider NULL pointer as empty string.
But when I get return data from std::wstring like this,
std::wstring strData;
const wchar* pStr = strData.c_str();
ASSERT(NULL == pStr); // ASSERT!!
pStr is not NULL but pointer which wstring point.
Can I make std::string return NULL when it has no string data?
Now I wrap every str member variable like this :
const wchar* GetName() { // I hate this kinds of wrapping function
if (m_Name.empty())
{
return NULL;
}
return m_Name.c_str();
}
My working environment is
Visual Studio 2008 sp1 in Windows
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为您只需要与旧库交互的新行为,并且不需要在所有代码中(例如,如果您通过,
strlen()
将中断一个空指针)你最好的选择是使用实用函数来提供正确的行为。就像您建议的那样:
并在必要时将其命名为。
Since you only need that new behavior for interacting with that legacy library and not in all code (for example
strlen()
will break if you pass a null pointer into it) your best bet is to use an utility function for providing proper behavior.Something like you suggested:
and call it where necessary.
使用此通用函数将字符串转换为指针。所有
NULL
或empty() / ""
字符串都返回nullptr
而任何 1+ 长度的字符串都会返回正确的指针。Use this general functions to convert strings to pointers. All
NULL
orempty() / ""
strings returnnullptr
while any 1+ length strings returns the proper pointer.