刚学编程,问个问题 怎么退出多层循环语句?
#include <windows.h>#include <tlhelp32.h> #include <stdio.h>#include <stdlib.h>BOOL FindModules(){ HANDLE hProcessSnap; PROCESSENTRY32 pe32; HANDLE hModuleSnap; MODULEENTRY32 me32; //对系统中当前所有的进程拍下快照 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //在使用 PROCESSENTRY32 结构之间需要先设置好该结构的大小 pe32.dwSize = sizeof(PROCESSENTRY32); //获取第一个进程 Process32First(hProcessSnap, &pe32); //采用 Do - While 遍历所有进程 do { //printf("\n-----------------------------------------------------"); printf("\n PROCESS NAME: = %s", pe32.szExeFile); printf("\n PROCESS ID = %d", pe32.th32ProcessID); //给进程所引用的模块信息设定一个快照 hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID); me32.dwSize = sizeof(MODULEENTRY32); Module32First(hModuleSnap, &me32); do { if(strcmp(me32.szModule,"termsrv.dll")==0) { printf("\n\n 发现MODULE NAME: termsrv.dll in process ID:%d\n" ,me32.th32ProcessID); CloseHandle(hModuleSnap); CloseHandle(hProcessSnap); return 0; \\为了第一时间找到模块后退出 我在此就用了return。 } } while(Module32Next(hModuleSnap, &me32)); //遍历获取下一个进程 } while(Process32Next(hProcessSnap, &pe32)); \\上面添加return后能达到目的 但编译有警告 是在此处没返回值。刻意在此加个return吧 虽然不执行 但感觉像是在拼凑。} \\有啥其他方法吗? 如果不用goto。。。 用了会被笑话的。。。int main(){ //system("@color 73&&cls"); FindModules(); //system("pause");}
[解决办法]
if(strcmp(me32.szModule,lpModuleName)==0)
{ ...
CloseHandle(hModuleSnap);
return 2;
}
还是有问题,你不能保证你的if一定可以判定成功,那么你仅仅在这里设置返回和关闭句柄,那么就存在一直没有运行到if里面的情况,这是个程序上的漏洞。
[解决办法]
你怎么知道if(strcmp(me32.szModule,lpModuleName)==0)一定会为真?如果一直都是假怎么办?