用命令行进行文件操作

走神的指针 2011-05-12 11:44:35

#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
FILE *pr,*pw;
pr = fopen(argv[1],"r");
pw = fopen(argv[2],"w");
……
……
}


为什么我用一个文件指针打开一个文件就不会报错;加了一个就报错了呢:访问违例(段异常)
...全文
167 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
走神的指针 2011-05-14
  • 打赏
  • 举报
回复
问题基本解决

[Quote=引用 8 楼 fish_phenix 的回复:]
你这个程序传入的参数是什么
argc > 2?

问题应该是 agrv[2]根本是个无效字符串吧
[/Quote]

我觉得如果没有进行参数的检查时,默认是只有两个参数吧(程序名+操作文件名)
argv[2]确实无效

[Quote=引用 16 楼 zhao4zhong1 的回复:]
小心驶的万年船。

C/C++ code
#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
FILE *pr,*pw;
if (argc<3) {
printf("Usage: %s inputfile outputfile\n",argv[0]);
……
[/Quote]

在进行上述声明之后 问题就解决了

我一开始认为argc的个数是我们打开cmd窗口后进行输入的 一般符合该程序所要求的个数的
可事实还是得现在程序里进行声明 应该是类似于匹配的东西吧

好啦 谢谢大家
走神的指针 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pink9527 的回复:]
#include<stdio.h>
int main(int argc,char *argv[])
{
FILE *pr,*pw;
pr = fopen(argv[1],"r+");
pw = fopen(argv[2],"w+");
}

编译xx.cpp文件,组建xx.exe文件

在exe当前目录下新建一xx.txt,输入cmd,另存为xx.bat,运行xx……
[/Quote]

是啊 我采用单个文件指针对一个文件写入一个字符 成功了 说明命令行的操作是对的
但是 我想把读一个文件的内容 然后写到另一个文件去 就失败了……
假使我下面的代码没补全 那也不应该提示错误吧
另外 这种情况下程序都无法编译了 打开cmd输入命令也没用吧
走神的指针 2011-05-13
  • 打赏
  • 举报
回复
我没往下写,就单纯的那几行代码就已经出错了。

我猜是不是命令行参数不能同时操作两个文件啊?
ljt3969636 2011-05-13
  • 打赏
  • 举报
回复
pr = fopen(argv[1],"r"); 这句没错的话你确定
argv[2]的值正确名?
先大致判断下


for (int i=0;i<argc;++i)
{
cout<<"参数"<<i<<":"<<argv[0]<<endl;//打印参数看看参数2正确与否
}
//------------------------------------------------------------
if (argv[1]==NULL||argv[2]==NULL)
cout<<"缺少参数"<<endl;
else
{
FILE *pr=NULL,*pw=NULL;
pr = fopen(argv[1],"r");
pw = fopen(argv[2],"w");
if (pr==NULL)
cout<<"文件1打开失败"<<endl;
if (pw==NULL)
cout<<"文件2打开失败"<<endl;

}
fish_phenix 2011-05-13
  • 打赏
  • 举报
回复
你这个程序传入的参数是什么
argc > 2?

问题应该是 agrv[2]根本是个无效字符串吧
jianghuzhongrenc 2011-05-13
  • 打赏
  • 举报
回复
没有找出错误来,应该是输入参数的问题!
xspace_time 2011-05-13
  • 打赏
  • 举报
回复
#include<stdio.h>
int main(int argc,char *argv[])
{
FILE *pr,*pw;
pr = fopen(argv[1],"r+");
pw = fopen(argv[2],"w+");
}

编译xx.cpp文件,组建xx.exe文件

在exe当前目录下新建一xx.txt,输入cmd,另存为xx.bat,运行xx.bat,在cmd命令里输入
xx.exe x.txt xx.txt,这才是命令行进行文件操作
luciferisnotsatan 2011-05-13
  • 打赏
  • 举报
回复
你的命令行是怎么输的?
FILE *pr,*pw;
pr = fopen(argv[1],"r");
pw = fopen(argv[2],"w");
光这3行代码,如果不是命令参数输错了,应该不会出现 访问违规的
lovelyanimal 2011-05-13
  • 打赏
  • 举报
回复
段异常应该是坏指针所致
请在打开前检测argc,或者在命令行中提供正确的参数
vipvvv 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zgz1990 的回复:]
我没往下写,就单纯的那几行代码就已经出错了。

我猜是不是命令行参数不能同时操作两个文件啊?
[/Quote]
应该不是这个问题
赵4老师 2011-05-13
  • 打赏
  • 举报
回复
纠正:
小心驶的万年船。→小心驶得万年船。
zyj_604 2011-05-13
  • 打赏
  • 举报
回复
代码要检查异常
要判断argv是否是存在
打开文件之后,要判断文件打开是否成功
赵4老师 2011-05-13
  • 打赏
  • 举报
回复
小心驶的万年船。
#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
FILE *pr,*pw;
if (argc<3) {
printf("Usage: %s inputfile outputfile\n",argv[0]);
return 1;
}
pr = fopen(argv[1],"r");
if (NULL==pr) {
printf("Can not read file %s!\n",argv[1]);
return 2;
}
pw = fopen(argv[2],"w");
if (NULL==pw) {
fclose(pr);
printf("Can not create file %s!\n",argv[2]);
return 3;
}
……
……
return 0;
}



lida2003 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 zgz1990 的回复:]
C/C++ code

#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
FILE *pr,*pw;
pr = fopen(argv[1],"r");
pw = fopen(argv[2],"w");
……
……
}



为……
[/Quote]


#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[])
{
FILE *pr,*pw;
pr = fopen("aaa.txt",r");
pw = fopen("bbb.txt","w");
……
……
}




这样就不会有问题的。
原因是你的argv[]指针有问题。调试的时候打印一下&argv[]的值
子达如何 2011-05-13
  • 打赏
  • 举报
回复
先用argc检查一下参数个数传对了没有?
走神的指针 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wang2666 的回复:]
lz,
最好加上参数个数检查。
如果需要,参数格式也检查下。
[/Quote]

我在最前面插入了
if (argc != 3)
{
printf("error");
}
结果一运行就会出现error; 也就是说argc的值是不确定的…(但是那个得进入cmd才输入的啊)
我用命令行操作一个文件就不用出现着这个问题

另外 我看过操作两个文件的 不过那是固定路径的文件

所以我觉得命令行用来操作两个文件是否有问题?
wang2666 2011-05-13
  • 打赏
  • 举报
回复
lz,
最好加上参数个数检查。
如果需要,参数格式也检查下。
走神的指针 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jialejiahi 的回复:]
1 楼主的这几句代码没有问题。
2 如果程序是这样写的,那么运行时至少应该有两个命令行参数,如:a.exe test1.txt test2.txt
3 错误可能出在没有给出的代码中或者运行程序的方式上。
[/Quote]

to2:我知道命令行参数要有2个。
to3:可是我单步到了pw = fopen()的下一步就出错了
jialejiahi 2011-05-13
  • 打赏
  • 举报
回复
1 楼主的这几句代码没有问题。
2 如果程序是这样写的,那么运行时至少应该有两个命令行参数,如:a.exe test1.txt test2.txt
3 错误可能出在没有给出的代码中或者运行程序的方式上。

69,370

社区成员

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

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