- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
// 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 指针呢?
最佳答案
input
和 input(.txt)
是不同的文件名(如果您的意思是 input.txt
也是)。您将需要指定文件的确切名称。
当然,在尝试对它们执行任何读/写操作之前,您应该检查 input_file
和 output_file
不是 NULL
。如果它们为空,那么您可能会通过检查 errno
(可能是通过 perror
函数)获得关于问题出在哪里的线索,例如:
input_file = fopen("input.txt", "r");
if ( !input_file )
{
perror("Failed to open input file: ");
exit(EXIT_FAILURE);
}
其他问题:
c1
和 c2
的类型必须为 int
。这是因为 EOF
超出了任何有效字符值(由 fgetc
返回)。 while(c1 != '\n')
和下一个while
循环中,还需要检查c1 != EOF
否则,如果文件结束出现在 \n
之前,这将是一个无限循环。关于c - 为什么在调用 getc 时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28934190/
根据“未定义行为”的现代解释,编译器有权假设不会发生导致未定义行为“不可避免”的事件链,并且可以消除仅适用于以下情况的代码:将执行未定义的行为;这可能会导致未定义行为的影响及时倒退,并使原本可以观察到
在阅读 getc 手册页时,我遇到了: may be implemented as a macro which evaluates stream more than once. 那么,getc 也可以
程序有什么问题? #include #include #include main( ) { char * buf="robot.c"; char c;int i=0; FILE*f
在下面的代码中,我尝试存储文件中的所有字符(包括换行符)。如果读取换行符,变量“i”应该递增,“j”重置为 0,但这种情况不会发生。通过从我的数组打印到控制台,我已经确认换行符实际上正在被读取和存储。
它只是一个程序,我试图读取文件中作为参数传递的单词的出现次数,该文件也作为下一个参数传递。 代码如下所示: #include extern void exit(int); void main(int
我正在用 C 开发一个链表。我正在从一个 txt 文件中获取数据。但是当我尝试运行该程序时,它给我一个 getc() 的段错误这是代码, #include #include struct node{
程序: #include #include char *f_gets(char *s, int n, FILE *iop) { int c=0; char *cs; cs =
我试图找到 getc 和 fgetc 之间的区别。当时我看到这样的说法: The difference between getc and fgetc is that getc can be imple
我正在使用 Perl 6 模块 Term::termios . #!/usr/bin/env perl6 use v6; use Term::termios; my $saved_termios :=
我有一个函数读取 unsigned long long 中的每一位并将值存储在数组中,现在我想将此函数转换为返回数字中的下一位并将数据处理留给调用者的函数. 理想情况下,它的工作方式与 getc()
我有一个函数读取 unsigned long long 中的每一位并将值存储在数组中,现在我想将此函数转换为返回数字中的下一位并将数据处理留给调用者的函数. 理想情况下,它的工作方式与 getc()
我有一个函数 getNum(),它从文件中获取一个数字并返回它。当我回到 getNum() 时,我丢失了指针,它再次从文件的开始处开始。我想知道如何获取 getc 所在的位置,然后返回到那个地方。我在
所以我开始实现霍夫曼树,为此,我尝试从标准输入或输入文件获取字符值。输入文件(只是一个字符串“cheese”)被添加到数组 freqcounts 中,其中添加的 freqcounts 索引是它读取的字
我遇到的问题是在这一行: int tok = getc(fp); getc 返回 -1。为什么?提前致谢。 #include #include #include "file_reader.h" /
printf("hello2"); int i = 0; int done = 0; while (!done) { char c; printf("hello3"); c =
我正在阅读 Jim Trevor 等人所著的Cyclone:C 的安全方言。一切都是为了编程语言类(class)。作者表示,如果调用 getc(null) 可能会导致段错误,因为 C 标准没有指定如何
当我尝试从名为“file1”的文件中读取输入时,我的程序正确显示文件中的字符数,但采用无法识别的字符格式。下面是代码 #include #include void db_sp(FILE*); in
// Program to remove the comments and the spaces from the given input file #include #include using
这是我的代码。 #include #include int main(int argc,char** argv) { char a; a=9; FILE * fp; f
我正在尝试用 C 编写一个简单的“猫”克隆。我正在运行 Windows 7 并使用 MinGW 编译器。但是,每当我运行该程序时,它都会返回文本文件,但每个字符都替换为“☺”字符。提前谢谢你。 #in
我是一名优秀的程序员,十分优秀!