开关盒中的分段错误[关闭]

Posted

技术标签:

【中文标题】开关盒中的分段错误[关闭]【英文标题】:segmentation err in switch case [closed] 【发布时间】:2021-03-30 12:44:18 【问题描述】:

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

#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");

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

【问题讨论】:

char c = getc(fd); c 应该是一个 int (加:不要重复自己...) 好的,先生,我会做的。先生,错误出现在第一种情况下(我正在谈论的那个:()你能不能看看我的编辑并告诉它是否正确(我做了什么)@wildplasser 请修复编译器警告而不是忽略它们。当我编译程序时,我会收到实际指示错误的警告。您似乎混淆了 openfopen 并使用错误的参数调用其他函数。 没有像#include &lt;stdin.h&gt;这样的头文件也可以看看fopen语法 我们不仅不是您的调试器,我们尤其不是交互式调试会话。 【参考方案1】:

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

现在呢?

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

【讨论】:

以上是关于开关盒中的分段错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

非常简单的分段错误错误c ++ [关闭]

c++ 。我试图通过在开关内使用数组来获取用户输入,但是当我运行代码时它显示分段错误?

这段代码一次执行良好,另一次出现分段错误

返回指针时出现分段错误[关闭]

开关盒中的变量范围[重复]

为啥 C++ 标准向量在分配或调整大小时会出现段错误? [关闭]