qq_37335168 2022-05-18 14:07 采纳率: 84%
浏览 40
已结题

在C语言中使用创建一个文件并写入两行字符串,之后再另一个文件中分行读出字符串,在执行时为什么会出行segmentation fault 错误?


#include <stdio.h>
 
int main()
{
   FILE *fp = NULL;//创建输出流的指针
 
   fp = fopen("/tmp/test.txt", "w+");//传入指定的目录和指定为可读可写模式,打开文件,若不存在则创建文件
   fprintf(fp, "This is testing for fprintf...\n");//向指针值对应的输出流写入一行字符串
   fputs("This is testing for fputs...\n", fp);//写入另一行字符串到执政之对应的输出流当中
   fclose(fp);//关闭文件,释放内存;这里没创建缓冲区,不需要清除缓冲区
}

以上代码运行正确:我在linux /tmp下发现一个添加了内容的文件,该文件对该账户的权限时wr-,后来报分段故障时,我把它改成了777的最高权限;

#include <stdio.h>
 
int main()
{
   FILE *fp = NULL;//定义一个输入流指针
   char buff[500];//定义一个输入流缓冲区:读取的数据先放到这里
 
   fp = fopen("/tmp/test.txt", "r");//打开刚创建的文件,并指定为可读
   fscanf(fp, "%s", buff);//使用fscanf从指针值指向的输入流读出数据为字符串形式,并存储到缓冲区的地址buff中,遇到空格时就停止读取
   printf("1: %s\n", buff );//打印数组
 
   fgets(buff, 500, fp);//使用fgets向缓冲区中试图读入244个字符,完成之前若遇到换行符或者eof,则返回已经读到的字符给表示缓冲区的数组;
   printf("2: %s\n", buff );
   
   fgets(buff, 500, fp);;//使用fgets向缓冲区中试图读入244个字符,完成之前若遇到换行符或者eof,则返回已经读到的字符给表示缓冲区的数组;
   printf("3: %s\n", buff );
   fclose(fp);
 
}

以上代码编译位报错,但运行时却弹出segmentation?晚上查是访问了不该访问的内存,换一台机器运行是不是会好了;

  • 写回答

1条回答 默认 最新

  • 浪客 2022-05-18 14:33
    关注

    ls -alF /tmp/test.txt 看看文件权限。应该是没有读写权限引起的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 创建了问题 5月18日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改