请问一个关于 argv的有关问题
请教一个关于 argv的问题
MAIN函数
调用MyAddProtectPath
直接在代码里面写
能够成功执行函数
如果这样写
然后在命令行运行
无法成功调用函数,请大家帮我看看这个问题
------解决思路----------------------
在以上两句后下断点,查看是否转换成功
------解决思路----------------------
应该是
------解决思路----------------------
大家都看到了, 就是那个lstrlen遭了,
这个是求字符串长度, 不是缓冲区长度.
sizeof可以求数组形的缓冲区长度.
在你的程序中既然用到的常量, 那么使用MAX_PATH作为参数是最好的.
lstrlen(wszPath) + 1 //这里的+1也有问题. 缓冲区只有MAX_PATH, 你却还想+1, 极端情况下, 就溢出了. 只能是-1, 为\0留出一个空间.
------解决思路----------------------
strlen和sizeof弄混了。
MAIN函数
int main(int argc, char* argv[])
{
TCHAR wszPath[MAX_PATH];
TCHAR wszPath3[MAX_PATH];
HRESULT hResult = S_OK;
if(argc > 1){
printf( "Connecting to filter's port...\n" );
hResult = FilterConnectCommunicationPort( MINISPY_PORT_NAME,
0,
NULL,
0,
NULL,
&port );
mbstowcs(wszPath, argv[2], lstrlen(wszPath) + 1);
mbstowcs(wszPath3, argv[3], lstrlen(wszPath) + 1);
MyAddProtectPath(wszPath, wszPath3);
MyAddProtectPath(L"C:\\xx", L"*.html");
}
if (IS_ERROR( hResult ))
{
printf( "Could not connect to filter: 0x%08x\n", hResult );
goto Main_Exit;
}
getchar();
Main_Exit:
if (INVALID_HANDLE_VALUE != port)
{
CloseHandle( port );
}
return 0;
}
VOID MyAddProtectPath(WCHAR *path, WCHAR *fileType)
{
DWORD result;
INPUT_BUFFER input;
ZeroMemory(&input, sizeof(INPUT_BUFFER));
input.command = ADD_PROTECTED_PATH;
wcscpy(input.protectedPath, path);
wcscpy(input.fileType, fileType);
//发送 ADD_PROTECTED_PATH命令,准备和驱动层进行通信
FilterSendMessage(port,
&input,
sizeof(INPUT_BUFFER),
NULL,
0,
&result);
}
调用MyAddProtectPath
直接在代码里面写
MyAddProtectPath(L"C:\\xx", L"*.html");
能够成功执行函数
如果这样写
MyAddProtectPath(wszPath, wszPath3);
然后在命令行运行
C:\Documents and Settings\Administrator\Debug>HideExtendFileNameApply.exe "C:\\xxx" "*.html"
无法成功调用函数,请大家帮我看看这个问题
------解决思路----------------------
mbstowcs(wszPath, argv[2], lstrlen(wszPath) + 1);
mbstowcs(wszPath3, argv[3], lstrlen(wszPath) + 1);
在以上两句后下断点,查看是否转换成功
------解决思路----------------------
应该是
sizeof wszPath/sizeof *wszPath
------解决思路----------------------
大家都看到了, 就是那个lstrlen遭了,
这个是求字符串长度, 不是缓冲区长度.
sizeof可以求数组形的缓冲区长度.
在你的程序中既然用到的常量, 那么使用MAX_PATH作为参数是最好的.
lstrlen(wszPath) + 1 //这里的+1也有问题. 缓冲区只有MAX_PATH, 你却还想+1, 极端情况下, 就溢出了. 只能是-1, 为\0留出一个空间.
------解决思路----------------------
strlen和sizeof弄混了。