微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

切换案例中的分段错误

如何解决切换案例中的分段错误

我写了一段代码在c中实现文件锁定。解决错误ignoring all the warnings 哈哈后,我能够编译代码,但现在问题是,当我尝试向文件添加内容时,它显示分段错误代码是:

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>

char data[1000],ch;
int cont;
int main(int argc,char **argv) {
if (argc > 1) {
int fd = fopen(argv[1],"w");
if(fd == -1) {
  printf("Unable to open the file\n");
  exit(1);
}
static struct flock lock;

lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
lock.l_pid = getpid();

int ret = fcntl(fd,F_SETLKW,&lock);
printf("Return value of fcntl:%d\n",ret);
printf("\n\n\tOperations you can perform here:\n\t\n");
printf("\n\t1.ADD TO FILE\n\t2.DELETE THE FILE\n\t3.PRINT CONTENTS OF FILE\n\t4.EXIT");
printf("\n\tEnter your choice: ");
scanf("%d",&cont);
switch(cont)
    {
    case 1:
        printf("Enter contents to store in file : \n");
        fgets(data,1000,stdin);
        fputs(data,fd);
        printf("Data added to the file successfully");
        break;
    case 2:
        remove(fd);
        break;
    case 3:
        int c = getc(fd);
        while (c != EOF)
        {
            printf("%c",c);
            c = getc(fd);
        }
    case 4:
        exit(0);
    }
}
}

我什至尝试过

fclose(fd); fd = fopen("advisory.txt","a");

这个,在 switch case 的开头添加内容文件。但无济于事。

解决方法

您混淆了文件描述符(由 open() 返回)和指向文件的指针(由 fopen() 返回)。不要在需要定期的汽车油箱中加入柴油。

现在怎么办?

阅读这两个功能的手册页并了解差异。了解 C 中标准 I/O 库 的含义及其提供的函数(例如 fopen()、fgets()、fgetc()、fclose() 等等)。了解什么是 Unix I/O 函数(例如 open()、read()、write()、close())。然后,您将能够更正代码中导致段错误的许多问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?