Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::basic\u fstream::put()无效_C++_Fstream - Fatal编程技术网

C++ std::basic\u fstream::put()无效

C++ std::basic\u fstream::put()无效,c++,fstream,C++,Fstream,我有以下代码: #include <iostream> #include <fstream> int main(int argc, char *argv[]) { if (argc != 2) { std::cout << "Usage: basics <file>" << std::endl; return 0; } std::basic_fstream<unsigne

我有以下代码:

#include <iostream>
#include <fstream>

int main(int argc, char *argv[]) {
    if (argc != 2) {
        std::cout << "Usage: basics <file>" << std::endl;
        return 0;
    }

    std::basic_fstream<unsigned char> stream;

    stream.open(argv[1], std::fstream::out);
    stream.put('T');
    stream.put('E');
    stream.put('S');
    stream.put('T');
    stream.flush();
    stream.close();

    return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
如果(argc!=2){
标准::coutQuoting

与格式化输出函数不同,如果输出失败,此函数不设置failbit

即使您检查流状态,也不会显示任何错误。但是,如果您尝试使用格式化输出操作编写内容,将引发
std::bad_cast
异常,因为在可能的原因中,没有与该区域设置对应的方面,在该操作完成时会检查该方面

原始操作不关心本地化,因此不会因此而失败,而如果原始写入失败,则会失败

例外情况
如果std::has_facet(loc)=false,则std::bad_cast


实际上,
std::ctype
专门用于
char
wchar\u t
unsigned char
,您必须手动执行。对于
en\u GB.utf8
std::has_facet(std::locale(“en\u GB.utf8”))==false

您可能应该检查写入是否确实成功。有趣的是,从
无符号字符
模板参数更改为
字符
(因为
std::fstream
是typedefed)解决了这个问题。我不知道为什么;我必须深入研究STL内部才能找到答案。标准流只保证有
char
wchar\u t
的专门化。你不需要刷新和关闭,流死后会这样做。@molbdnilo我添加了刷新,因为我认为它值得所以为了防止像“尝试刷新”这样的评论,我把它放在这里:P