【问题标题】:Debug Assertion Failed VS2010调试断言失败VS2010
【发布时间】:2015-06-27 09:27:21
【问题描述】:

我正在制作一个非常简单的程序来读取文本文件并打印内容。当文件完成编译时,我不断收到此调试断言失败消息!

我以前从未见过,似乎找不到任何解决方案。

(它不会让我发布图片,因为我的代表不够高!)

代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
 FILE *file = fopen("C:\\Users\Kyne\\Desktop\\AdvProgrammingAssignment\\employees.txt", "r");
 char c;

do
{
    c = fgetc(file);
    printf("%c", c);
}
while(c != EOF);

fclose(file);
return 0;

printf("\n\n\n");
system("pause");
}

【问题讨论】:

  • 什么时候引起调试断言?还可以尝试使用调试器单步执行您的代码
  • C:\\Users\Kyne\\Desktop\\Users 后面缺少反斜杠
  • fgetc() 的返回类型是 int 而不是 char

标签: c++ c visual-studio-2010 debugging assertion


【解决方案1】:

使用调试器单步调试代码以查找导致调试断言的行,并检查文件是否已打开。

在一行

FILE *file = fopen("C:\\Users\Kyne\\Desktop\\AdvProgrammingAssignment\\employees.txt", "r");

看起来您在“Kyne”之前错过了一个“\”,所以应该是

FILE *file = fopen("C:\\Users\\Kyne\\Desktop\\AdvProgrammingAssignment\\employees.txt", "r");

还有其他问题,例如在主块结束之前调用return 0;

【讨论】:

    【解决方案2】:

    如果文件已正确打开,我看不到任何检查。另外,我会在第一次阅读之前检查 EOF 标记 - 使用 whilefeof() 代替。最后,这些行:

    printf("\n\n\n");
    system("pause");
    

    永远不会被调用,就像你在 fclose() 之后所做的那样 return 0 - 将它 [return 0] 移到末尾。

    试试这个:

    int main()
    {
        FILE *file = fopen("C:\\Users\\Kyne\\Desktop\\AdvProgrammingAssignment\\employees.txt", "r");
    
        if(!file)
        {
            printf("File could not be opened!\n");
            return -1;
        }
    
        while(!feof(file))
        {
            char c = fgetc(file);
            printf("%c", c);
        }
    
        fclose(file);
    
        printf("\n\n\n");
        system("pause");
    
        return 0;
    }
    

    很可能,您的错误源于将FILE* 设置为NULL - 在\\Users 之后缺少一个斜线,因此文件可能从未打开,fopen() 不断返回NULL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多