读书人

代码编译有关问题

发布时间: 2012-02-22 19:36:55 作者: rapoo

代码编译问题

C/C++ code
#include <stdio.h>#include <windows.h>int nCounter = 0;FILE *fp;bool FilterChar(char *pChar){    for(int i=0;i<31;i++)        if(*pChar == "\n\r<>,/?\\{}[]();:\'\" =%^*#!`~+\0&\t"[i]) return true;    return false;}bool IsGoodEmail(char *pEmail){    int a = strcspn(pEmail, "@"), b = strcspn(pEmail,"."), c = strlen(pEmail)-1;    if(pEmail[0] == '@' || (a+1) == b) return false;    if(!IsCharAlpha(pEmail[c])) pEmail[c] = '\0';        if((a < c) && (b > a) && (b < c)) return true;        return false;}bool IsValidFile(char *pFile){    int x = 0;    int nStrLen = lstrlen(pFile);    char *pExt  = new char[nStrLen]; ZeroMemory(pExt,nStrLen);    bool bRet   = false;    for(int i = nStrLen;i>0;i--){        if(pFile[i] == '.'){            while(i<nStrLen){                pExt[x] = pFile[i];                x++;i++;            } break;        }    }        if(!lstrcmp(pExt,".txt") || !lstrcmp(pExt,".htm") || !lstrcmp(pExt,".html") || !lstrcmp(pExt,".cpp") || !lstrcmp(pExt,".h") || !lstrcmp(pExt,".php")) bRet = true;    delete pExt; pExt = NULL;    return bRet;}void ScanFile(char *lpszFile){    if(IsValidFile(lpszFile)) SetConsoleTitle(lpszFile);    else return;    HANDLE hFile = CreateFile(lpszFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);    if(hFile != NULL || hFile != INVALID_HANDLE_VALUE)    {        DWORD dwFileSize = GetFileSize(hFile,NULL);        if(dwFileSize != INVALID_FILE_SIZE)        {            char *lpszFileBuffer = new char[dwFileSize]; ZeroMemory(lpszFileBuffer,dwFileSize);            DWORD dwRet = 0;            ReadFile(hFile,lpszFileBuffer,dwFileSize,&dwRet,NULL);            char *pEmail = new char[MAX_PATH]; ZeroMemory(pEmail,MAX_PATH);            char *pData = lpszFileBuffer;            unsigned int c = 0;            do{                if(*pData == '@'){                    while(!FilterChar(pData)) *pData--;                    *pData++;                    while(!FilterChar(pData)){                        if(c < MAX_PATH-1){                            pEmail[c] = *pData;                            c++; *pData++;                        } else break;                    }                    if(IsGoodEmail(pEmail)){ printf("%s\n",pEmail); fprintf(fp,"%s\n",pEmail);nCounter++;    }                                        ZeroMemory(pEmail,MAX_PATH); c = 0;                }            }while(*pData++);                        pData = NULL;            delete lpszFileBuffer;            CloseHandle(hFile);        }        CloseHandle(hFile);    }}static bool ScanDirectory(char *lpszDirectory,DWORD dwSize){    HANDLE hFind;    WIN32_FIND_DATA *fd = new WIN32_FIND_DATA; ZeroMemory(fd,sizeof(WIN32_FIND_DATA));        char * lpszBuffer;    DWORD dwNewSize       = 0;    bool bStatus       = true;        DWORD dwActualSize = dwSize+3;    char * lpszScanDir = new char[dwActualSize]; ZeroMemory(lpszScanDir,dwActualSize);    wsprintf(lpszScanDir,"%s\\*",lpszDirectory);    hFind = FindFirstFile(lpszScanDir,fd);    if(hFind != INVALID_HANDLE_VALUE)    {        do{            if(fd->cFileName[0] != '.'){                dwNewSize  = (dwSize + lstrlen(fd->cFileName) + 3);                lpszBuffer = new char[dwNewSize]; ZeroMemory(lpszBuffer,dwNewSize);                wsprintf(lpszBuffer,"%s\\%s",lpszDirectory,fd->cFileName);                if(!ScanDirectory(lpszBuffer,dwNewSize)) ScanFile(lpszBuffer);                delete lpszBuffer;            }        } while(FindNextFile(hFind,fd));    } else bStatus = false;    FindClose(hFind);    delete fd,lpszBuffer,lpszScanDir;    return bStatus;}int main(int argc,char **argv){    char *lpszScanDir = new char[MAX_PATH]; ZeroMemory(lpszScanDir,MAX_PATH);    char *savefile="d:\\邮件.txt";//保存文件目录    fp=fopen(savefile,"a");    SetConsoleTitle("Email Scanner v1.0 - By Smith");    printf("Email scanner v1.0\nBy Smith\n\nEnter directory to scan\nExample \"c:\" (without quotes)\n\n> ");            scanf("%s",lpszScanDir);    ScanDirectory(lpszScanDir,lstrlen(lpszScanDir));    delete lpszScanDir;    SetConsoleTitle("Email Scanner v1.0 - By Smith");    printf("\nTotal emails found: %d ,save in file %s.\nPress escape to exit...",nCounter,savefile);    fprintf(fp,"\nTotal emails found: %d\nPress escape to exit...",nCounter);    while(!GetAsyncKeyState(VK_ESCAPE)) Sleep(10);        fclose(fp);    return 0;} 



C:\>cl 1.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

1.cpp
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/out:1.exe
1.obj
1.obj : error LNK2001: unresolved external symbol __imp__IsCharAlphaA@4
1.obj : error LNK2001: unresolved external symbol __imp__GetAsyncKeyState@4
1.obj : error LNK2001: unresolved external symbol __imp__wsprintfA
1.exe : fatal error LNK1120: 3 unresolved externals

编译不成功,高手这是怎么回事啊

有高手帮我编译个能用的吧 我发邮箱alongasd@126.com 谢谢

[解决办法]
你试试将user32.lib手动链接进去,附加依赖项里
[解决办法]
jackyjkchen@bupt.cn
工程整个发给我,我看看

读书人网 >C语言

热点推荐