每当我输入数据时程序都会关闭

时间:2013-11-05 21:39:34

标签: c error-handling

所以,我试图创建一个简单的程序来创建一个新文件,并使用fopen()将用户输入的任何内容放入一个新创建的文件中。

它编译好了,但是当试图实际写东西并点击进入程序关闭时出现某种错误 - Debug Assertion failed,Expression(stream!=null) - 我试图谷歌这个,大家说它发生在文件不是与.cpp / .c文件位于同一文件夹中。但是,这不应该是一个问题,因为我尝试创建一个文件对吗?谢谢你的任何提示;)。

#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <string.h>
#include <string>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    FILE*out = fopen("improvements.txt", "w");
    // FILE*file = fopen("data.txt", "r");
    char artist[256];
    printf(" What do you wish to add to the new file ?\n");
    scanf("%c", artist);
    fprintf(out, "%c", artist);

    // fclose(file);
    fclose(out);

    getchar();
    return 0;
}

3 个答案:

答案 0 :(得分:2)

有很多关于这段代码的东西是可疑的,从玩具C程序中一堆非标准,不相关和/或C ++标题的出现开始,到getchar()结尾 - 紧接在退出反模式之前,但让我们关注即时错误:

FILE*out = fopen("improvements.txt", "w");

如果由于某种原因,此操作发生失败,fopen将返回一个空指针,您不检查该指针。在C语言编程时,您负责检查库例程是否失败。因为你没有,后来fprintf崩溃了程序。

您应该在fopen行后立即添加此代码:

if (!out)
{
    perror("improvements.txt");
    return 1;
}

这将导致程序打印错误消息,并在fopen失败时退出。错误消息的文本应该告诉您为什么 fopen失败。

答案 1 :(得分:1)

该错误意味着您尝试读取NULL指针。这意味着您的fopen失败了。这就是始终建议在fopen 之后进行错误检查以确保不会发生这种情况的原因。

尝试在fopen中提供文件的完整路径

  FILE *out = fopen("usr/Desktop/improvements.txt", "w"); // example path .. put a full path like this in your code

另外..艺术家是单个字符还是字符串? ..如果是一个字符串,那么你的scanf也是错的。

scanf读取%s描述符不是%c的字符串。此外,如果艺术家字符串将包含空格..那么scanf将失败..以避免尝试使用fgets

读取字符串

答案 2 :(得分:1)

您是在尝试读取字符串还是单个字符?

&#39;%C&#39;用于读取单个字符。 如果您需要阅读字符串,则应使用&#39;%s&#39;。