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.如果不必要,请不要就地修改文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |