【问题标题】:_chsize raises assertation error on visual studio 2017_chsize 在 Visual Studio 2017 上引发断言错误
【发布时间】:2018-06-07 15:53:52
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
...
int function () {
    FILE *f;
    f = fopen("list.txt", "rb+");
    ...
    int value;
    if (_chsize_s(f, value) == 0) return 1;
}

由于某种原因,上面的 sn-p 代码在 MS Visual Studio 中运行时,会在 _chsize_s() 函数处产生错误。弹出以下消息:

Debug Assertation Failed!
Expression: (fh >= 0 && (unsigned)fh < (unsigned)_nhandle)

我不知道该怎么做,更不用说如何解决了。任何帮助将不胜感激。

【问题讨论】:

  • 编译时应该会收到其他警告,可能与隐式声明有关。这些警告必须修复,它们告诉你真正的错误在哪里。
  • 你应该得到一个关于这个的编译器警告。 _chsize_s() 的参数应该是 int,而不是 FILE*
  • @Barmar 我很困惑......如果要传递的参数类型是 int,我该如何提及我想要截断的文件?对不起,如果这听起来非常愚蠢。如果可能的话,一个工作示例或示例会很棒!

标签: c file file-io visual-studio-2017


【解决方案1】:

您忽略了编译器的警告或禁用了它们。为了修复隐式声明警告,您必须包含 _chsize_s 的标头:

#include <io.h>

这将修复隐式声明警告,并发现错误,即 _chsize_s 被错误的类型调用。正确的称呼方式是:

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
...
int function(void) {
    FILE *f;
    f = fopen("list.txt", "rb+");
    ...
    int value;
    if (_chsize_s(_fileno(f), value) == 0) return 1;
}

这表明不要忽略编译器警告是多么重要(除了例外......大多数理智的人会在使用 MSVC 编写 C 时定义_CRT_SECURE_NO_WARNINGS)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    相关资源
    最近更新 更多