赋值时将整数赋给指针,未作类型转换

yangzhifu 2008-07-08 07:11:23
这个函数的功能是将你前面所有输入的文件内容连接在一起,然后显示,如果没有参数,则按标准处理(显示在屏幕上),类似与cat。
但是在没有参数的时候是正确的,而在加了文件的时候是错误的,整个编译过程有个警告,如下:
cat1.c: 在函数‘main’中:
cat1.c:10: 警告:赋值时将整数赋给指针,未作类型转换
代码如下:
  1 #include<stdio.h>
2 int main(int argc, char *argv[])
3 {
4 FILE *fp;
5 void filecopy(FILE *, FILE *);
6 if(argc == 1)
7 filecopy(stdin,stdout);
8 else
9 while(--argc >0)
10 if((fp = fopen(*++argv,"r") == NULL))
11 {
12 printf("cat:can't open %s",*argv);
13 return 1;
14 }
15 else
16 {
17 filecopy(fp, stdout);
18 fclose(fp);
19
20 }
21 return 0;
22 }
23
24 void filecopy(FILE *ifp, FILE *ofp)
25 {
26 int c;
27 while((c = getc(ifp)) != EOF)
28 putc(c,ofp);
29 }
30
31

我觉得没有错误,而这个警告也不应当有,fopen的函数原形是这样的:
FILE *fopen(const char *path, const char *mode);
返回的也是指针类型,为什么有错误呢?希望高手能解答!
...全文
2493 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dedlous 2011-12-12
  • 打赏
  • 举报
回复
。。。解决问题了
yangzhifu 2008-07-08
  • 打赏
  • 举报
回复
对,给分!
fred_fu 2008-07-08
  • 打赏
  • 举报
回复
請你仔細看一下這條語句:if((fp = fopen(*++argv,"r") == NULL))
這條語句的執行過程是先fopen(*++argv,"r") == NULL,得到一個bool型的值,然後再fp = bool;
這樣編譯都通不過。
應該改為:if((fp=fopen(*++argv,"r")) == NULL)
ChamPagneZ 2008-07-08
  • 打赏
  • 举报
回复
楼主,给分才是王道
呵呵
yangzhifu 2008-07-08
  • 打赏
  • 举报
回复
的确是这样的了,看来还的仔细看看!
ChamPagneZ 2008-07-08
  • 打赏
  • 举报
回复
fp = fopen(*++argv,"r") == NULL ;// "="和"=="优先级问题,

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧