我正在尝试删除 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/