在wifstream中搜索和灌输会出错

mkk

我有一个如下文件:

$ xxd 1line
0000000: 3939 ba2f 6f20 6f66 0d0a                 99./o of..

我想在C ++中阅读这一行:

#include <codecvt>
#include <iostream>
#include <locale>
#include <fstream>
#include <string>

int main(int argc, char** argv) {
  std::wifstream wss(argv[1], std::ios::binary);
  wss.seekg(std::ios_base::end);
  const auto fileSize = wss.tellg();
  wss.seekg(std::ios_base::beg);

  // std::locale utf8_locale(wss.getloc(), new std::codecvt_utf8<wchar_t, 0x10FFFF, std::consume_header>);
  // wss.imbue(utf8_locale);

  std::wstring wline;
  std::getline(wss, wline);

  std::cout << "filelen: " << fileSize << std::endl;
  std::cout << "strlen: " << wline.size() << std::endl;
  std::wcout << "str: " << wline << std::endl;

  return 0;
}

我用下面的方式编译它:

$ g++ -std=c++11 imbue_issue.cpp

第一件事:似乎wss.seekg(std :: ios_base :: end)不会在文件末尾移动文件位置:

$ ./a.out 1line
filelen: 2
strlen: 9
str: 99?/o of

第二件事是,当取消注释与语言环境相关的行时,getline仅读取2个字符:

$ ./a.out 1line
filelen: 2
strlen: 2
str: 99

我的编译器:

$ g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

有谁知道这个文件出现上述问题的原因是什么?

一些程序员哥们

问题是如何调用seekg函数当您使用一个参数调用它时,它从一开始就被用作绝对位置,您将寻求具有任何值的值std::ios::end,这恰好2在您的情况下。

相反,您应该使用两个参数的重载:

wss.seekg(0, std::ios_base::end);  // Seek to offset 0 from the end

您仍然会遇到使用宽字符类型读取文件的问题,因为内容似乎并非如此。UTF-8是一种多字节的字符编码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在symfony 3中使用dbal灌输

来自分类Dev

GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则会出错

来自分类Dev

在大文件中搜索和替换正则表达式而不会出现OutOfMemoryException

来自分类Dev

为什么两种方法在提取和求和文本中的数字时都会出错?

来自分类Dev

使用泛型和多态性,会出错

来自分类Dev

测试简单的Rxjava和gradle代码会出错吗?

来自分类Dev

在 Ruby 中的实例变量中传递参数会出错

来自分类Dev

Apache Lucene和Hibernates搜索出错

来自分类Dev

同时搜索标题和价格时出错

来自分类Dev

在文本中查找数字总是会出错

来自分类Dev

在Android Studio中打开移植的android项目会出错

来自分类Dev

在文本中查找数字总是会出错

来自分类Dev

在InitState中设置提供程序状态会出错

来自分类Dev

如何在JavaScript中测试方法而不会出错?

来自分类Dev

在JHipster中创建Spring Bean时为什么会出错?

来自分类Dev

正则表达式模式中的“ ^”会出错

来自分类Dev

手动在apue中编译代码,但会出错

来自分类Dev

如何在 sql 中编码这些关系而不会出错

来自分类Dev

为什么在编码二叉搜索树时会出错?

来自分类Dev

创建NSShadow会出错

来自分类Dev

在文件中搜索单词时出错

来自分类Dev

在Python中搜索值时出错

来自分类Dev

在文件中搜索单词时出错

来自分类Dev

在弹性搜索中删除索引时出错

来自分类Dev

在COBOL中搜索和搜索全部

来自分类Dev

通过意图向Viber和Line之类的App进行视频共享会出错

来自分类Dev

为什么在JavaScript中使用新的和构造函数会出错

来自分类Dev

在我的上下文中同时使用nextLine()和nextInt()总是会出错

来自分类Dev

尽管已加载模型和模块,但不会生成任何内容,也不会出错

Related 相关文章

  1. 1

    在symfony 3中使用dbal灌输

  2. 2

    GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则会出错

  3. 3

    在大文件中搜索和替换正则表达式而不会出现OutOfMemoryException

  4. 4

    为什么两种方法在提取和求和文本中的数字时都会出错?

  5. 5

    使用泛型和多态性,会出错

  6. 6

    测试简单的Rxjava和gradle代码会出错吗?

  7. 7

    在 Ruby 中的实例变量中传递参数会出错

  8. 8

    Apache Lucene和Hibernates搜索出错

  9. 9

    同时搜索标题和价格时出错

  10. 10

    在文本中查找数字总是会出错

  11. 11

    在Android Studio中打开移植的android项目会出错

  12. 12

    在文本中查找数字总是会出错

  13. 13

    在InitState中设置提供程序状态会出错

  14. 14

    如何在JavaScript中测试方法而不会出错?

  15. 15

    在JHipster中创建Spring Bean时为什么会出错?

  16. 16

    正则表达式模式中的“ ^”会出错

  17. 17

    手动在apue中编译代码,但会出错

  18. 18

    如何在 sql 中编码这些关系而不会出错

  19. 19

    为什么在编码二叉搜索树时会出错?

  20. 20

    创建NSShadow会出错

  21. 21

    在文件中搜索单词时出错

  22. 22

    在Python中搜索值时出错

  23. 23

    在文件中搜索单词时出错

  24. 24

    在弹性搜索中删除索引时出错

  25. 25

    在COBOL中搜索和搜索全部

  26. 26

    通过意图向Viber和Line之类的App进行视频共享会出错

  27. 27

    为什么在JavaScript中使用新的和构造函数会出错

  28. 28

    在我的上下文中同时使用nextLine()和nextInt()总是会出错

  29. 29

    尽管已加载模型和模块,但不会生成任何内容,也不会出错

热门标签

归档