fopen()函数以"a+"方式打开一个不存在的文件后读写出现问题
//添加用户输入单词后,在单词头加入编号,确保编号跟着前面的开始排序
#include "stdio.h"
#include "stdlib.h"
#define MAX 40 int main(void){
FILE *fp;
char words[MAX];
int count = ,
temp; if((fp = fopen("words.txt", "a+")) == NULL){
fprintf(stderr, "打开文件\"words\"失败!\n");
exit();
} //从最后一个序号开始继续排序
fseek(fp, 0L, SEEK_SET);
while(){
if(fscanf(fp, "%d", &temp) != )
break;
else
count++;
}
puts("输入单词添加到文件中:");
while(gets(words) != NULL && words[] != '\0'){
fprintf(fp, "%d:%s", count++, words);
} puts("文件内容:");
while(fscanf(fp, "%s", words) == ){
puts(words);
} if(fclose(fp) != ){
fprintf(stderr, "关闭文件失败!\n");
} return ;
}
问题代码
问题应该是出现在fopen()函数以"a+"的方式打开一个不存在的文件而导致的;
以下引用于"C语言中文网"(http://c.biancheng.net/cpp/html/250.html);
“a+"方式:以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。
正常来说代码上应该是没有问题的,因为"a+"方式打开文件可以对文件进行读写的操作,如果文件不存在则进行创建!

后面直接对文件先写入了内容,再运行程序后发现不会出现宕机的情况,但是鉴于程序的原来目的是要在文件不存在的情况下自动创建,那么这个问题我的解决办法是第一次打开文件的时候以"a"的方式打开,写入结束后关闭文件流指针,再重新以"r"的当时打开,避免了该情况的发生。
以上,若有问题希望大家可以指出来。
fopen()函数以"a+"方式打开一个不存在的文件后读写出现问题的更多相关文章
- php中fopen函数用法详解(打开文件)
介绍下php中的fopen函数. 1.resource fopen(string $filename, string $mode [,bool $use_include_path [, resou ...
- C++->以读或写方式打开一个文件
以读或写方式打开一个文件 #include<iostream.h> //.h以C|非C标准引用库文件 #include<fstream.h> #include<std ...
- Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 当打开一个.h或.cpp文件时, Solution Explorer就自动展开文件所在的目录
当打开一个.h或.cpp文件时, Solution Explorer就自动展开文件所在的目录: 如果不想展开: Tools -> Options -&g ...
- 文件操作之增删改查3---文件的修改,f.replace(),在linux里的一些应用sed,with语句方法来打开一个或多个文件避免忘记关闭,python一行写的太长,怎么编写多行的规范
f.replace()with open("xxx","r",encoding="utf-8") as f: 想修改文件中间的数据,有两个办 ...
- vsto 以隐藏的方式打开一个excel 文件 并获得excel文件的缩略图
public byte[] GetExcelPictureFile(string filepath) { Workbook workbook=null; Microsoft.Office.Intero ...
- VBA 打开一个string指定的文件
Open csvFileName For Input As #1 Dim lineChanger as String lineChanger = Chr(13) fileData = Split(St ...
- win10系统64位安装git后右键运行git bash here生成一个mintty.exe.stackdump文件后闪退解决方案
在其他win10电脑上复制了一个null.sys文件,替换C:\Windows\System32\drivers\null.sys,搞定.
- C语言-一个fopen函数中未使用二进制模式(b)引发的血案
转自:http://blog.csdn.net/hinyunsin/article/details/6401854 最近写了一个网络文件传输模块,为了让这个模块具有更好的移植性,我尽量使用C标准IO ...
随机推荐
- ASP.NET CORE 1.0 初次接触
vs2015 update3 升级后,可以创建asp.net core 1.0 的web应用了, 默认模版,发布到指定文件夹 服务器上需要安装 DotNetCore.1.0.0-WindowsHost ...
- hdu1043
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#inclu ...
- ListView控制消息
ListView控制消息 ListView控制消息是提供给父窗口或其他窗口通过发消息来控制ListView窗口本身. ListView控件提供给了以下消息来让外部程序控制自身: ListView_Ap ...
- phpopp
<?php header("content-type:text/html;charset=utf8"); class lidepeng{ var $name; public ...
- Haskell Seq函数和严格计算
参考链接http://stackoverflow.com/questions/11046590/the-seq-function-and-strictness https://wiki.haskell ...
- vue+webpack构建项目
概述 -- 项目中会用到的插件 vue-router vue-resource 打包工具 webpack 依赖环境 node.js start 安装vue开发的模板 # 全局安装 vue-cli $ ...
- solr最佳实践
管理页面 页面地址:http://{ip}:{port}/solr/#/ 管理页面的data-import页可以手动重建索引,configuration指定了数据源,重建索引也可以通过http请求触发 ...
- sql第三天
->完整的select语句及执行顺序(必须记住) 5...select 5.2->distinct 7...top n [percent] 5.1->列名 聚合函数(1.2-> ...
- PXE+kickstart自动安装ubuntu14.04
本文参考了诸多文章,先感谢这些文章的作者. 使用pxe安装系统需要安装dhcp,tftp,http等服务(当然也可以使用其他文件共享方式比如nfs,ftp). 实验环境: 1. vmware 12 2 ...
- 关于IIS和.NET 4.0的问题总结(转)
注册asp.net 4.0 到iis 如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下 运行->cmd Microsoft Windows [版本 6.1.7601 ...