C++ sgetn没有';t空终止字符串
将C++ sgetn没有';t空终止字符串,c++,buffer,stringstream,c-strings,null-terminated,C++,Buffer,Stringstream,C Strings,Null Terminated,将char*作为第一个参数,并向其写入字符。它不会将尾随的'\0'写入字符* 这种行为似乎与我能找到写入的char*的其他时间不一致。然而,它在Clang、gcc和VisualStudio中是一致的,所以我不敢相信这是所有编译器都有的bug 是否有理由本标准不要求在字符*后面添加'\0' []因为它可以用来读取任意数据,而不仅仅是文本 以函数为例,它也采用char*参数,但可用于读取任意数据,包括二进制数据。您不希望它在读取二进制文件时添加字符串终止符吗?等等,这是一个basic\u strea
char*
作为第一个参数,并向其写入字符。它不会将尾随的'\0'
写入字符*
这种行为似乎与我能找到写入的char*
的其他时间不一致。然而,它在Clang、gcc和VisualStudio中是一致的,所以我不敢相信这是所有编译器都有的bug
是否有理由本标准不要求在字符*
后面添加'\0'
[]因为它可以用来读取任意数据,而不仅仅是文本
以函数为例,它也采用
char*
参数,但可用于读取任意数据,包括二进制数据。您不希望它在读取二进制文件时添加字符串终止符吗?等等,这是一个basic\u streambuf
。返回一个basic_filebuf
,我完全希望它能够读取二进制数据。从stringstream
(以及相应的basic_streambuf
)读取二进制数据有什么意义?@JonathanMee是所有流缓冲区类的基类。没有任何东西可以阻止std::string
包含二进制或任意数据。但是仅仅因为字符串
可以包含二进制数据,并不能阻止data()
添加'\0'
。我花了这么长时间才发现我的char*
s没有被'\0'
终止,这可能只是我感到沮丧。谢谢你的回答。