从文件中读取随机字符串时出错

图恩潘

我尝试从此文件中读取1个随机项:

//"file.bin" structure:
Offset      Length
0           4       Total items (=n)

4           4       Item 1 Position = 4 + n * 5 = offset1
8           1       Item 1 Length = l1
9           4       Item 2 Position = offset2 = offset1 + l1
13          1       Item 2 Length
14          4       Item 3 Position
18          1       Item 3 Length
...

4+n*5       l1      Item 1
4+n*5+l1    l2      Item 2
...

但是我得到了错误:nbg我得到的字符串不完全在文件中。我已经成功尝试了C#代码,但是我是C ++的新手,我不知道是什么导致了错误。
下面的代码有什么问题?

FILE* f;
if (!fopen_s(&f, "D:\\file.bin", "rb"))
{
    byte* buf = new byte[4];
    byte length;
    char* sss;
    unsigned int number;

    // Read Total Items Number
    fread(buf, sizeof(byte), 4, f);
    number = int_from_bytes(buf, true);

    //Generate random number
    std::random_device rd;
    std::mt19937 rng(rd());
    std::uniform_int_distribution<int> uni(0, number);
    auto random_integer = uni(rng);

    // Seek to read Random item Position-Length
    // Read Post
    fseek(f, 4 + 5 * random_integer, SEEK_SET);
    fread(buf, sizeof(byte), 4, f);
    number = int_from_bytes(buf, true);

    // Read Length
    fread(&length, sizeof(byte), 1, f);
    int len = static_cast<byte>(length);

    // Read String
    fseek(f, number, SEEK_SET);
    sss = new char[len + 1];
    fread(sss, 1, len, f);

    const wchar_t* nbg = toWideChar(sss);
    MessageBoxW(NULL, nbg, L"", 0);

    delete[] buf;
    delete[] sss;
    fclose(f);
}

wchar_t* toWideChar(const char* input)
{
    int wchars_num2 = MultiByteToWideChar(CP_UTF8, 0, input, -1, NULL, 0);
    wchar_t* wstr2 = new wchar_t[wchars_num2];
    MultiByteToWideChar(CP_UTF8, 0, input, -1, wstr2, wchars_num2);
    return wstr2;
}

int int_from_bytes(const byte * bytes, _Bool reverse)
{
    int tmp;

    if (reverse)
    {
        for (size_t i = sizeof(tmp); i--; ++bytes)
            ((char *)&tmp)[i] = *bytes;
    }
    else memcpy(&tmp, bytes, sizeof(tmp));

    return tmp;
}
辩证的

问题描述中的细节很少,因此我在这里猜测,但可能是问题出在sss缓冲区末尾缺少NUL终止符在调用之前添加以下行toWideChar(sss)

sss[len] = '\0';

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从文件中读取随机字符串时出错

来自分类Dev

从文件读取时在Shell脚本中拆分字符串

来自分类Dev

从文件读取时如何跳过字符串中的空格

来自分类Dev

-读取字符串字符时出错

来自分类Dev

从文件读取时字符串损坏

来自分类Dev

从文件读取时字符串损坏

来自分类Dev

在malloc()ed对象中读取字符串错误的字符时出错。为什么?

来自分类Dev

从JTable空字符串读取信息时出错

来自分类Dev

从单元格读取字符串时出错

来自分类Dev

从文件中读取字符串

来自分类Dev

使用配置文件中的连接字符串获取 SSIS 包中的连接时出错

来自分类Dev

com.itextpdf.text.exceptions.InvalidPdfException:重建失败:在文件指针处读取字符串时出错

来自分类Dev

505在.htaccess文件中传递查询字符串变量时出错

来自分类Dev

匹配批处理文件中的两个字符串时出错

来自分类Dev

将ArrayList字符串写入文件时出错

来自分类Dev

从文件中读取字符串时,String.split不会与\ n分开

来自分类Dev

从文本文件读取时如何比较单独行中的字符串

来自分类Dev

从C中的名称文件读取字符串时遇到问题

来自分类Dev

使用fstream在c ++中读取文件时显示额外的字符串

来自分类Dev

从C中的二进制文件读取字符串时发生访问冲突

来自分类Dev

读取txt文件时出现问题(带引号的字符串中的EOF)

来自分类Dev

在C#中读取CSV文件时出现编码字符串问题

来自分类Dev

从 Python 中的 csv 文件读取时将字符串转换为整数/浮点数

来自分类Dev

C、读取文本文件时字符串中的垃圾/垃圾值

来自分类Dev

为什么我在 Python 中读取 csv 文件时得到的是字符串而不是字典?

来自分类Dev

逐行读取文件时如何跳过字符串

来自分类Dev

从文件读取时重复字符串但不返回整数

来自分类Dev

运行读取文件时返回字符串的命令

来自分类Dev

在Delphi中制作字符串时出错

Related 相关文章

  1. 1

    从文件中读取随机字符串时出错

  2. 2

    从文件读取时在Shell脚本中拆分字符串

  3. 3

    从文件读取时如何跳过字符串中的空格

  4. 4

    -读取字符串字符时出错

  5. 5

    从文件读取时字符串损坏

  6. 6

    从文件读取时字符串损坏

  7. 7

    在malloc()ed对象中读取字符串错误的字符时出错。为什么?

  8. 8

    从JTable空字符串读取信息时出错

  9. 9

    从单元格读取字符串时出错

  10. 10

    从文件中读取字符串

  11. 11

    使用配置文件中的连接字符串获取 SSIS 包中的连接时出错

  12. 12

    com.itextpdf.text.exceptions.InvalidPdfException:重建失败:在文件指针处读取字符串时出错

  13. 13

    505在.htaccess文件中传递查询字符串变量时出错

  14. 14

    匹配批处理文件中的两个字符串时出错

  15. 15

    将ArrayList字符串写入文件时出错

  16. 16

    从文件中读取字符串时,String.split不会与\ n分开

  17. 17

    从文本文件读取时如何比较单独行中的字符串

  18. 18

    从C中的名称文件读取字符串时遇到问题

  19. 19

    使用fstream在c ++中读取文件时显示额外的字符串

  20. 20

    从C中的二进制文件读取字符串时发生访问冲突

  21. 21

    读取txt文件时出现问题(带引号的字符串中的EOF)

  22. 22

    在C#中读取CSV文件时出现编码字符串问题

  23. 23

    从 Python 中的 csv 文件读取时将字符串转换为整数/浮点数

  24. 24

    C、读取文本文件时字符串中的垃圾/垃圾值

  25. 25

    为什么我在 Python 中读取 csv 文件时得到的是字符串而不是字典?

  26. 26

    逐行读取文件时如何跳过字符串

  27. 27

    从文件读取时重复字符串但不返回整数

  28. 28

    运行读取文件时返回字符串的命令

  29. 29

    在Delphi中制作字符串时出错

热门标签

归档