加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的文件I / O困难

发布时间:2020-12-16 10:42:59 所属栏目:百科 来源:网络整理
导读:我正在编写一个Unix扩展实用程序的版本,用文件中的空格替换制表符.为此,我正在阅读每个角色并测试它是否是制表符.如果是,它将使用给定的空格量替换选项卡,否则将打印该字符. 我的主要方法是这样的 int main(int argc,char *argv[]){ FILE *fp; char *help1="
我正在编写一个Unix扩展实用程序的版本,用文件中的空格替换制表符.为此,我正在阅读每个角色并测试它是否是制表符.如果是,它将使用给定的空格量替换选项卡,否则将打印该字符.

我的主要方法是这样的

int main(int argc,char *argv[]){
 FILE *fp;

 char *help1="-help";
 char *help2= "--help";

 //int spaces; //number of spaces to replace tabs

 fp= fopen(argv[1],"rw");
 parse_file(fp,4);
 fclose(fp);

 return 0;
}

parse_file方法就像

void parse_file(FILE *fp,int spaces)
{
  int i; //loop counter
  char c; //current character
  while (c!= EOF)
{
    c= getchar(); //get char from stream

    if (c=='t') //if char is a tab
    {
        for (i=0; i< spaces; i++)
            putchar(" "); //replace with spaces

    } 
    else 
        putchar(c); //otherwise,print the character

}

}

编译时,我从指针获得一个整数而没有putchar(“”)的强制警告;并且程序在执行时会遇到段错误.

所以,我的问题:

1-什么是警告“从没有强制转换的指针生成整数”的全部内容?我该怎么做才能解决它?

2-代码在执行时生成段错误,文本文件作为参数传入.这段代码中有什么东西会导致这种情况吗?

解决方法

>你在一个字符串(“”)上调用putchar,但它需要一个char参数(”). (实际上是一个int,但只传递一个char是安全的.)
>段错误可能是由于fp上的fclose,可能是NULL.你应该检查fopen的返回值.您在parse_file之后才注意到的原因是它根本没有触及fp(它从stdin读取并写入stdout).要使用流fp,您应该使用getc(fp)和putc(fp). (这仍然无效,因为你用比你从中读取数据更多的数据来覆盖流,所以你会得到垃圾.)

实际上,当没有给出命令行参数时,程序肯定会出现段错误. fopen segfaults,因为它被传递空指针argv [1],或者它返回一个空指针本身.

在编写这些类型的程序时,请遵循Unix哲学并将其写为filters:从stdin读取,写入stdout.如果不必要,请不要就地修改文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读