C - 命令历史(核心转储)

标签 c linux file ubuntu

我正在尝试删除 file1 的第 20 行。该程序的其余部分是一个简单的 shell,它只能工作我无法创建用户使用的命令的历史记录。 当我尝试插入命令时出现的错误消息是:Segmentation fault (core dumped)

我正在执行的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>

#define GetCurrentDir getcwd  //get the path of file
#define BUFFER_LEN 1024

int ch;
FILE *file1, file2;
char line[BUFFER_LEN]    

while(1){
    if(!fgets(line, BUFFER_LEN, stdin))
    {                       
        break;              
    }
    else if(line, BUFFER_LEN, SIGQUIT){
                fopen("fileOne.c","r");
            while((ch = getc(file1)) != EOF){   
                printf("%s",ch);
            } 
        } 

        if(count<20)
        {
            fputs(argv[100] ,file1);  
        }
        else{
            fclose(file1);
            file1 = fopen("fileOne.c","r"); 
            rewind(file1);        
            file2 = fopen("repicla.c","w"); 
            while((ch = getc(file1)) != EOF){              
                if((ch = getc(file1)) != "\n"){         
                    count++;            
                    if(count != 20){                
                    putc(ch, file2);            
                    }
                }   
            }   
            fclose(file1);  
            fclose(file2);  
            remove("fileOne.c");    
            rename("replica.c","fileOne.c");    
            fputs(argv[100] ,file1);   
        }
}

最佳答案

最重要的是,我无法编译你的代码!我会很快深入研究,但我怀疑你的代码中存在重大错误,你需要另一本书,因为无论什么书你正在阅读(你正在阅读而不是猜测,对吧?),这对你来说不太好。您考虑过 K&R2E 吗?

我的编译器会发出错误消息,您的也会如此。您可能正在尝试执行我们无法帮助您的陈旧二进制文件。您需要使您的代码可编译

假设该问题已解决,您在以下代码中有错误,您的编译器可能会警告您:

while((ch = getc(file1)) != EOF){   
    printf("%s",ch);
} 

您正在将与 %s 格式委托(delegate)对应的 int 传递给 printf。您需要传递一个 char *。如果您传递了错误的类型,则会出现未定义的行为,这很可能会导致崩溃。

在这种情况下,我认为您可能希望使用 putchar(ch);printf("%c",ch);

尽管如此,当您的编译器对您大喊大叫时,请不要忽略它!如果您不理解错误或警告,请问一个问题!

关于C - 命令历史(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44556585/

相关文章:

c++ - 哪个在内存中更快,int 或 char?还有文件映射或 block 读取?

c - 为什么在使用指针访问二维数组的元素时使用两个星号?

c - 方阵置换

C++ 将字节写入串行流

c - seteuid() 不工作。原因?

linux - Bash 脚本无法识别 bool 逻辑, "command not found"

java - IO程序不是从控制台运行的,而是从Eclipse(Java)运行的

java - 字符串数组名称搜索

c++ - 获取地址信息 : in what way is AI_PASSIVE ignored if the nodename is specified?

c - 我如何在 C 中使用不透明指针?