切换案例中的分段错误

问题描述

我写了一段代码在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())。然后,您将能够更正代码中导致段错误的许多问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...