【问题标题】:Writing to a file in C not working在 C 中写入文件不起作用
【发布时间】:2017-04-01 08:52:37
【问题描述】:

我有以下代码,在输入字符后,我不断收到“程序已停止工作”错误。

我做了一些调试,发现问题出在写入文件部分,但是我找不到问题。

谁能帮帮我? (我是 C 新手)

#include <stdio.h>

int main()
{

char characters;

printf("Input your characters: ");
scanf("%s", &characters);

FILE *fp = fopen("File.txt", "w");
fprintf(fp, "%s", characters);    
fclose(fp);

}

【问题讨论】:

  • char characters; 只存储一个字符。
  • 我投票结束这个问题,因为它太基本了。
  • 这也是一个等待发生的崩溃。你正在通过在它上面写一个随机字符串来破坏你的堆栈
  • @slim(我不是为这个问题辩护,但是..)你确定这是一个有效的关闭理由吗?
  • @SouravGhosh 这不是进行元讨论的地方,但在元上人们普遍认为基于不了解基础知识的问题太多了,而且由于没有现成的关闭匹配的原因,我决定从现在开始这样做。 SO 不在您学习 C 的第一周。

标签: c file-io scanf file-writing


【解决方案1】:

在您的代码中,characters 的类型为 char,不适合存储 字符串。您需要将characters 设为数组。

本质上,幕后发生的事情是,由于%s,输入值(即使是单个char)被存储在所提供地址所指向的内存中,但在那之后,尝试存储终止 null,导致越界访问。这会调用undefined behavior

引用C11,第 7.21.6.2 章,fscanf(),(强调我的

s 匹配一系列非空白字符。286)

如果不存在l 长度修饰符,则相应的参数应为 指向一个字符数组的初始元素的指针,它足够大,可以接受 序列和一个终止的空字符,它将自动添加。

【讨论】:

  • @DatBoi 通过动态分配内存(您可以轻松地在网上找到如何做),或者通过定义一个大的 char 数组。
猜你喜欢
  • 1970-01-01
  • 2013-12-20
  • 2018-11-13
  • 2018-03-27
  • 1970-01-01
  • 2012-01-16
  • 2015-06-20
  • 1970-01-01
  • 2011-08-29
相关资源
最近更新 更多