C语言有关文件读取的问题

CaseyGreen 2009-07-25 09:50:33
#include<stdio.h>
#include<string.h>
int main(char *argv){
FILE *fp1;
char ch1;
if((fp1=fopen(&argv,"r+"))==NULL){
printf("flie %s cannot be opened\n",argv);
exit(0);
}
while(ch1!=EOF){
putchar(ch1);
ch1=fgetc(fp1);
}
fclose(fp1);
return(1);
}
我想在运行程序将文件路径是作为参数传入程序,可现在就是不行以运行程序就出错,请高手帮忙解决一下。谢谢!!
...全文
135 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangbo0603 2009-07-26
  • 打赏
  • 举报
回复
学习
brookmill 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 caseygreen 的回复:]
引用 4 楼 brookmill 的回复:
其他问题:
第一次putchar(ch1)的时候,ch1不是从文件读出来的,是一个随机值。
一般的习惯,main正常结束的时候都是返回0的,出错的时候返回非0值。


请问有没有其他方法,谢谢
[/Quote]
在循环前面读一次就行了
ch1=fgetc(fp1);
while(ch1!=EOF){
putchar(ch1);
ch1=fgetc(fp1);
}
brookmill 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 caseygreen 的回复:]
弱弱的问一下,为什么要加
if (argc < 2) {
    printf("error\n");
    exit(0);
    }
这段代码呢?
[/Quote]
因为后面的代码要使用argv[1],这段代码是为了保证argv[1]是有效的。
如果运行的时候没有附加任何参数,argc就是1,这时候只有argv[0]是有效的字符串,argv[1]不知道是什么,所以不能使用。
这是个使用数组的良好习惯,时刻警惕防止数组越界访问。
agwtpcbox1 2009-07-26
  • 打赏
  • 举报
回复
同意七楼的
CaseyGreen 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 brookmill 的回复:]
其他问题:
第一次putchar(ch1)的时候,ch1不是从文件读出来的,是一个随机值。
一般的习惯,main正常结束的时候都是返回0的,出错的时候返回非0值。

[/Quote]
请问有没有其他方法,谢谢
mstlq 2009-07-26
  • 打赏
  • 举报
回复
回8楼,argc < 2说明命令行里没有输入文件名啊^_^
CaseyGreen 2009-07-26
  • 打赏
  • 举报
回复
弱弱的问一下,为什么要加
if (argc < 2) {
printf("error\n");
exit(0);
}
这段代码呢?
usr_src 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 brookmill 的回复:]
int main(int argc, char *argv[]){
FILE *fp1;
char ch1;
if (argc < 2) {
    printf("error\n");
    exit(0);
    }
if((fp1=fopen(argv[1],"r+"))==NULL){

[/Quote]



这个方法比较正规!!~
huasonl88 2009-07-25
  • 打赏
  • 举报
回复
if((fp1=fopen(&argv,"r+"))==NULL)把&去掉
还有要用到exit(0);函数,要加#include<stdlib.h>头文件
zlmguangzhou 2009-07-25
  • 打赏
  • 举报
回复
请问下各位高手,文件的读取在哪个领域应用得比较广泛呢?
brookmill 2009-07-25
  • 打赏
  • 举报
回复
其他问题:
第一次putchar(ch1)的时候,ch1不是从文件读出来的,是一个随机值。
一般的习惯,main正常结束的时候都是返回0的,出错的时候返回非0值。
飞天御剑流 2009-07-25
  • 打赏
  • 举报
回复
int main(char *argv){ 应为 int main( int argc, char* argv[] )


fp1=fopen(&argv,"r+" 应为 fp1=fopen( argv[1], "r+" )
brookmill 2009-07-25
  • 打赏
  • 举报
回复
int main(int argc, char *argv[]){
FILE *fp1;
char ch1;
if (argc < 2) {
printf("error\n");
exit(0);
}
if((fp1=fopen(argv[1],"r+"))==NULL){

69,382

社区成员

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

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