初学VC++,做了一个命令行工具。可以正常编译,但是在CMD下传递命令行参数时,却遇到了“内存不可read”的错误。
我怀疑是判断参数时指针使用不当的错误,但是不知道如何解决,请高手指正。#include "iostream.h"
#include "windows.h"int main(int argc, char *argv[])
{
if (argc==1)
{
cout<<"操作窗口。"<<endl<<endl;
cout<<argv[0]<<" [drive:][path][filename] [+H | -H] [+E | -E]"<<endl<<endl;
cout<<" + 设置状态。"<<endl;
cout<<" - 清除状态。"<<endl;
cout<<" H 窗口隐藏状态。"<<endl;
cout<<" E 窗口使能状态。"<<endl;
exit(1);
} HWND hwd;
hwd=::FindWindow(0,argv[1]); if (hwd==0) //当没有发现窗口时退出
{
cout<<argv[1]<<" - 该窗口不存在"<<endl;
exit(1);
} for (int i=2;i<=argc;i++)
{
if(strcmp(argv[i],"+h")==0)
{
::ShowWindow(hwd,SW_HIDE);
cout<<argv[1]<<" - 窗口已隐藏"<<endl;
}
if(strcmp(argv[i],"-h")==0)
{
::ShowWindow(hwd,SW_SHOW);
cout<<argv[1]<<" - 窗口已显示"<<endl;
}
if(strcmp(argv[i],"+e")==0)
{
::EnableWindow(hwd,0);
cout<<argv[1]<<" - 窗口已禁止"<<endl;
}
if(strcmp(argv[i],"-e")==0)
{
::EnableWindow(hwd,4);
cout<<argv[1]<<" - 窗口已使能"<<endl;
}
}
}
我怀疑是判断参数时指针使用不当的错误,但是不知道如何解决,请高手指正。#include "iostream.h"
#include "windows.h"int main(int argc, char *argv[])
{
if (argc==1)
{
cout<<"操作窗口。"<<endl<<endl;
cout<<argv[0]<<" [drive:][path][filename] [+H | -H] [+E | -E]"<<endl<<endl;
cout<<" + 设置状态。"<<endl;
cout<<" - 清除状态。"<<endl;
cout<<" H 窗口隐藏状态。"<<endl;
cout<<" E 窗口使能状态。"<<endl;
exit(1);
} HWND hwd;
hwd=::FindWindow(0,argv[1]); if (hwd==0) //当没有发现窗口时退出
{
cout<<argv[1]<<" - 该窗口不存在"<<endl;
exit(1);
} for (int i=2;i<=argc;i++)
{
if(strcmp(argv[i],"+h")==0)
{
::ShowWindow(hwd,SW_HIDE);
cout<<argv[1]<<" - 窗口已隐藏"<<endl;
}
if(strcmp(argv[i],"-h")==0)
{
::ShowWindow(hwd,SW_SHOW);
cout<<argv[1]<<" - 窗口已显示"<<endl;
}
if(strcmp(argv[i],"+e")==0)
{
::EnableWindow(hwd,0);
cout<<argv[1]<<" - 窗口已禁止"<<endl;
}
if(strcmp(argv[i],"-e")==0)
{
::EnableWindow(hwd,4);
cout<<argv[1]<<" - 窗口已使能"<<endl;
}
}
}
明显多了一个
比如app.exe filenale +H
参数有3个
argv[0],argv[1],argv[2]
这个时候并没有argv[3]
所以在循环的第2次的时候
strcmp(argv[i],"+h")==0
会找不到argv[3]
所以改成
for (int i=2;i <argc;i++)