gpt4 book ai didi

c - 为什么在调用 getc 时会出现段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:20 24 4
gpt4 key购买 nike

// Program to remove the comments and the spaces from the given input file
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
FILE *input_file, *output_file;

input_file = fopen("input", "r");
output_file = fopen("output", "w");

char c1,c2;

c1 = getc(input_file); // taking the first character of the file
c2 = getc(input_file); // Shows segmentation fault here

while(c1 != EOF)
{
if(c1 == '/' && c2 == '/') // if it is a single line comment
{
c1 = getc(input_file);


while(c1 != '\n') // keep scanning until \n character is found
{
c1 = c2;
c2 = getc(input_file);
}
}

else if(c1 == '/' && c2 == '*') // for multi line comment
{
while(c1 != '*' && c2 != '/')
{
c1 = c2;
c2 = getc(input_file);
}

c1 = getc(input_file);
c2 = getc(input_file);
}

else if(c1 == '\n' && c2 == '\n') // to remove extra newline characters
while(c1 == '\n')
c1 = getc(input_file);

else if(c1 == ' ' && c2 == ' ') // to remove extra whitespaces
while(c1 == ' ')
c1 = getc(input_file);
else
putc(c1, output_file);

c1 = c2;
c2 = getc(input_file);
}
}

我正在尝试从输入文件中删除注释和空格。但是,当我在 Windows 8 的代码块中使用 GCC 编译器运行此代码时,它停止工作。

编译此程序时未显示任何错误,但执行它时停止工作。

我尝试运行调试器,它在代码中标记的行中显示段错误。

编辑:

我又查了一下,发现input_file是一个NULL指针。但是,我在项目文件夹中有一个名为 input(.txt) 文件的文件。那为什么它是一个 NULL 指针呢?

最佳答案

inputinput(.txt) 是不同的文件名(如果您的意思是 input.txt 也是)。您将需要指定文件的确切名称。

当然,在尝试对它们执行任何读/写操作之前,您应该检查 input_fileoutput_file 不是 NULL。如果它们为空,那么您可能会通过检查 errno(可能是通过 perror 函数)获得关于问题出在哪里的线索,例如:

input_file = fopen("input.txt", "r");
if ( !input_file )
{
perror("Failed to open input file: ");
exit(EXIT_FAILURE);
}

其他问题:

  • c1c2 的类型必须为 int。这是因为 EOF 超出了任何有效字符值(由 fgetc 返回)。
  • while(c1 != '\n')和下一个while循环中,还需要检查c1 != EOF 否则,如果文件结束出现在 \n 之前,这将是一个无限循环。

关于c - 为什么在调用 getc 时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28934190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com