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日

悬赏问题

  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行