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'
终止,这可能只是我感到沮丧。谢谢你的回答。