stringstream-sgetn在iOS 5.1上返回NULL
stringstream sgetn returns NULL on iOS 5.1
我有一个代码,可以将std::stringstream
的内容复制到char * dest
static size_t copyStreamData(std::stringstream & ss, char * const & source, char * dest)
{
ss.str("");
ss.clear();
ss << source;
size_t ret = ss.rdbuf()->sgetn( dest, (std::numeric_limits<size_t>::max)() ) ;
dest[ret] = 0;
return ret;
}
在iOS 5.0及以下版本上,它运行正常。。。但在iOS 5.1中,它返回NULL。
我做错了什么?还有我如何修补我的代码?
您要做的基本上与正在做的相同:
std::size_t length = std::strlen(source) + 1; // + 1 for ' '
std::copy(source, source + length, dest);
// Assuming dest has length + 1 bytes allocated for it
我怀疑sgetn
是否返回NULL,因为sgetn
返回的是std::streamsize
,而不是指针类型。它是返回0,还是另一个函数返回NULL?在调用rdbuf()
之前,您是否尝试过刷新流?
您应该选择您的字符串表示。
如果由于某些原因必须使用C字符串,那么您的函数称为strncpy
。
std::strncpy(dest, source, max_size_of_dest);
阅读链接中的注意事项。
然而,如果您可以使用更好的抽象,那么我们鼓励您使用std::string
。
void copy(std::string const& source, std::string& dest) { dest = source; }
不必处理缓冲区长度(因此不会经常出错)是一个非常强大的帮助。
请注意,没有什么可以阻止您在应用程序中操作std::string
并仍然使用C方法进行通信:.c_str()
帮助很大。
相关文章:
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- fopen 在 gdb 中返回 NULL
- 为什么要从main()返回NULL?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- Box2D World.GetBodyList() 返回 NULL,但 World 显然正在更新对象
- boost::p ython:PyErr_Fetch始终返回 NULL 回溯
- 如何在 Visual C++ 中从返回类型为 map 的函数返回 null?
- 如何在C++中返回Null作为引用
- 从模板化函数返回Null对象
- GDALOpen 在 GEOTiff 文件上返回 null
- PyThreadState_GET() 从 PyImport_GetModuleDict() 中返回 NULL
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- 在构造函数处将类对象强制转换为接口始终返回 NULL
- 如何为迭代器返回"null"值?
- 具有 4 个指针的节点的递归插入函数返回 null
- winAPI FindResource 仅在 DLL 中返回 NULL
- 使用 dlopen/dlsym 打开C++共享库 - dlsym 返回 NULL
- SetWindowsHookEx 在挂接到其他线程时返回 NULL
- 尚未归shared_ptr所有的实例的 shared_from_this() 总是返回 null?