鱼C论坛

 找回密码
 立即注册
查看: 2585|回复: 13

是不是小甲鱼老师的这个程序错了,大家看看

[复制链接]
发表于 2012-8-7 14:16:13 | 显示全部楼层 |阅读模式
3鱼币
本帖最后由 魁拔 于 2012-8-8 13:17 编辑

我是按照c++快速入门第四讲里例子的代码原样敲下来的,上群里问,很多人说,这个程序错了,没有输入环节,但是视频里的程序和这个一样,为什么视频里的可以运行,而这个却在运行exe文件时,一闪而过
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char* argv[])
{
        FILE *in,*out;
        int ch;
        if(argc!=3)
        {
                fprintf(stderr,"输入形式:copyFile 源文件名 目标文件名\n");
                exit(EXIT_FAILURE);
        }
        if((in=fopen(argv[1],"rb"))==NULL)
        {
                fprintf(stderr,"打不开文件:%s\n",argv[1]);
                exit(EXIT_FAILURE);
        }
        if((out=fopen(argv[2],"wb"))==NULL)
        {
                fprintf(stderr,"打不开文件:%s\n",argv[2]);
                fclose(in);
                exit(EXIT_FAILURE);
        }
        while((ch=getc(in))!=EOF)
        {
                if(putc(ch,out)==EOF)
                {
                        break;
                }
        }
        if(ferror(in))
        {
                printf("读取文件:%s 失败!\n",argv[1]);
        }
        if(ferror(out))
        {
                printf("写入文件:%s 失败!\n",argv[2]);
        }
        printf("成功复制一个文件!\n");
        fclose(in);
        fclose(out);
        return 0;
}
大家帮我看一下,
这个程序的功能是复制文件
我也不知道错误在哪  对于这个程序的exe文件,在用cmd.exe时,我电脑上的cmd.exe默认的操作位置在windows\system32>,而别人的不是,例如小甲鱼老师的可以自由输入文件位置,还有就是文件中的argv[]数组指针在我们编写的程序里,怎么可能,在cmd.exe调用所编写的程序之前,事先给所编写的程序在内存上分配一个指针呢(就是说指针在程序内部,而这个指针却事先给他所在的程序指定一个内存位置——这时程序并未运行,指针又是如何出来的?然后这个程序才分配到指针所指向的内存,最后开始运行——“程序刚刚运行,指针又是如何在运行之前跑出来指定内存位置呢?”,这有别常理呀),还有fprintf可以换成print吗?


最佳答案

查看完整内容

不懂诶,main函数是一个函数,谁来调用它谁给他参数吧, 就理解成系统给那几个参数赋值的就好了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-7 14:16:14 | 显示全部楼层

不懂诶,main函数是一个函数,谁来调用它谁给他参数吧,
就理解成系统给那几个参数赋值的就好了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-7 14:48:06 | 显示全部楼层
汗,,main()函数里的char* argv[]这个就是输入环节,cmd里面输入,应该是兼容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-8-7 14:50:31 | 显示全部楼层
五月跳回家 发表于 2012-8-7 14:48
汗,,main()函数里的char* argv[]这个就是输入环节,cmd里面输入,应该是兼容。

奥,有点明白了,能说更清楚些吗,具体一点,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-7 15:00:23 | 显示全部楼层
魁拔 发表于 2012-8-7 14:50
奥,有点明白了,能说更清楚些吗,具体一点,谢谢了

比如把你编译生成的exe放到D盘
cmd里输入D: 回车
输入那个exe的名字,然后你....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-8-7 15:02:13 | 显示全部楼层
五月跳回家 发表于 2012-8-7 15:00
比如把你编译生成的exe放到D盘
cmd里输入D: 回车
输入那个exe的名字,然后你....

好吧,我试试,谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-7 20:26:16 | 显示全部楼层
LZ 你要输入参数才行啊, 比如你那个文件是1.EXE 在D盘
那么在CMD 的时候 要这样输入 d:\1.exe c:\\1.txt d:\\2.txt
才回车
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-7 23:04:32 | 显示全部楼层
表示你们对话我看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-7 23:16:50 | 显示全部楼层
这个要加参数运行的,所以不能直接运行,用到了命令行参数argv
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-8-8 13:05:46 | 显示全部楼层
夜色风行者 发表于 2012-8-7 20:26
LZ 你要输入参数才行啊, 比如你那个文件是1.EXE 在D盘
那么在CMD 的时候 要这样输入 d:\1.exe c:\\1.txt  ...

对于这个程序的exe文件,在用cmd.exe时,我电脑上的cmd.exe默认的操作位置在windows\system32>,而别人的不是,例如小甲鱼的可以像你说的那样自由输入文件位置,还有就是文件中的argv[]数组指针在我们编写的程序里,怎么可能,在cmd.exe调用所编写的程序之前,事先给所编写的程序在内存上分配一个指针呢(就是说指针在程序内部,而这个指针却给他所在的程序指定一个内存位置),还有fprintf可以换成print吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-8-8 13:12:26 | 显示全部楼层
五月跳回家 发表于 2012-8-7 15:00
比如把你编译生成的exe放到D盘
cmd里输入D: 回车
输入那个exe的名字,然后你....

对于这个程序的exe文件,在用cmd.exe时,我电脑上的cmd.exe默认的操作位置在windows\system32>,而别人的不是,例如小甲鱼的可以像你说的那样自由输入文件位置,还有就是文件中的argv[]数组指针在我们编写的程序里,怎么可能,在cmd.exe调用所编写的程序之前,事先给所编写的程序在内存上分配一个指针呢(就是说指针在程序内部,而这个指针却事先给他所在的程序指定一个内存位置——这时程序并未运行,指针又是如何出来的?然后这个程序才分配到指针所指向的内存,最后开始运行——“程序刚刚运行,指针又是如何在运行之前跑出来指定内存位置呢?”,这有别常理呀),还有fprintf可以换成print吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-8 13:38:44 | 显示全部楼层
魁拔 发表于 2012-8-8 13:12
对于这个程序的exe文件,在用cmd.exe时,我电脑上的cmd.exe默认的操作位置在windows\system32>,而别人的 ...

⊙﹏⊙b汗...cmd默认的操作位置可以改的诶,右键cmd,属性,起始位置那个选项,改成你想要的
main函数的参数是从命令行上传过来的,命令提示符下的命令都是,程序名 参数 参数...的形式
反正你在命令行输入 程序名 ,就运行那个程序,参数不对的话就提示错误信息结束程序,
fprintf可不可以换成printf你试试喽,效果是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-8-8 13:45:56 | 显示全部楼层
五月跳回家 发表于 2012-8-8 13:38
⊙﹏⊙b汗...cmd默认的操作位置可以改的诶,右键cmd,属性,起始位置那个选项,改成你想要的
main函数的 ...

就是说指针在程序内部,而这个指针却事先给他所在的程序指定一个内存位置——这时程序并未运行,指针又是如何出来的?然后这个程序才分配到指针所指向的内存,最后开始运行——“程序刚刚运行,指针又是如何在运行之前跑出来给程序指定内存位置的呢?”,这有别常理呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-8-8 14:15:48 | 显示全部楼层
五月跳回家 发表于 2012-8-8 14:09
不懂诶,main函数是一个函数,谁来调用它谁给他参数吧,
就理解成系统给那几个参数赋值的就好了,

呵呵,好吧,也只能这样了,谢谢哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 21:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表