注册 登录
编程论坛 VC++/MFC

C++编译成功,却不不显示正确的结果,帮忙看看错在哪了。谢谢大家!

qq4056 发布于 2015-06-09 22:26, 3179 次点击
程序代码:

#include<windows.h>
#include<stdio.h>
#include<stdlib.h>

void Copyself()
{
    wchar_t szSelfName[MAX_PATH] = {0};
    wchar_t szWindowsPath[MAX_PATH] = {0};
    wchar_t szSystemPath[MAX_PATH] = {0};
    wchar_t szTemPath[MAX_PATH] = {0};

    GetModuleFileName(NULL, szSelfName, MAX_PATH);
    GetWindowsDirectory(szWindowsPath, MAX_PATH);
    GetSystemDirectory(szSystemPath, MAX_PATH);

    strcat((char*)szWindowsPath, "\\test.txt");
    strcat((char*)szSystemPath, "\\test.txt");

    CopyFile(szSelfName, szWindowsPath, FALSE);
    CopyFile(szSelfName, szSystemPath, FALSE);

}

void GetSysInfo()
{
    wchar_t szComputerName[MAXBYTE] = {0};
    wchar_t szUserName[MAXBYTE] = {0};
    unsigned long nSize = MAXBYTE;
    OSVERSIONINFO OsVER;
   
    OsVER.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx(&OsVER);
   
    if( OsVER.dwOSVersionInfoSize == VER_PLATFORM_WIN32_NT)
    {
        if(OsVER.dwMajorVersion == 5 && OsVER.dwMajorVersion == 1)
        {
            printf("Windows xp %s \r\n", OsVER.szCSDVersion);
        }
        else if(OsVER.dwMajorVersion == 5 && OsVER.dwMajorVersion == 0)
        {
            printf("Windows 2k \r\n");
        }
    }
    else
    {
        printf("Ohter system\r\n");
    }

    GetComputerName(szComputerName, &nSize);
    printf("Computer Name is %s \r\n", szComputerName);
    nSize = MAXBYTE;
    GetUserName(szUserName, &nSize);
    printf("User Name is %s \r\n", szUserName);

}

int main()
{
    void Copyself();
    void GetSysInfo();
   
    system("pause");

    return 0;
}

我是在win7下用VS2012编译的。。。。
17 回复
#2
qq40562015-06-10 10:43
各位朋友帮忙一下
#3
诸葛欧阳2015-06-10 23:01
这些函数都不了解只能帮顶
#4
qq40562015-06-11 00:06
回复 3楼 诸葛欧阳
没关系,有问题一定要解决,谢谢你!
#5
後來2015-06-14 11:38
光看代码就感觉等级相差太远。。。望各位大神帮忙解决
#6
NBABOY2015-06-14 20:49
debug调试一下吧
#7
lo1062582015-06-15 19:10
debug调试一步一步走
#8
yangfrancis2015-06-17 18:11
我也没用过楼主的函数,不过感觉好像是想植入木马一样。建议在CopySelf函数里面输出一下szWindowsPath和szSystemPath的值,看能不能发现问题。
#9
qq40562015-06-18 22:57
回复 8楼 yangfrancis
朋友大才。。。其实我什么都不想干的。。。嘿嘿。。。
#10
无鋒2015-08-19 01:17
好厉害
#11
天使梦魔2015-08-19 19:20
复制的什么东西
main入口体,你要用那些函数吗?使用的话强制返回void干什么,你加上这个等于函数返回类型转换了。
去掉就行了
#12
农民工2015-08-22 14:27
字符集的问题
wchar_t是宽字符集
但你的字符操作函数 全是用的单字符函数集
因此可将所有wchar_t改成char
#13
coffeesoft2015-08-23 19:14
宽字符的话就用宽字符的函数
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>

void Copyself()
{
  wchar_t szSelfName[MAX_PATH] = {0};
  wchar_t szWindowsPath[MAX_PATH] = {0};
  wchar_t szSystemPath[MAX_PATH] = {0};
  wchar_t szTemPath[MAX_PATH] = {0};
 
  GetModuleFileName(NULL, szSelfName, MAX_PATH);
  GetWindowsDirectory(szWindowsPath, MAX_PATH);
  GetSystemDirectory(szSystemPath, MAX_PATH);
 
  wcscat(szWindowsPath, L"\\test.txt");
  wcscat(szSystemPath, L"\\test.txt");
 
  CopyFile(szSelfName, szWindowsPath, FALSE);
  CopyFile(szSelfName, szSystemPath, FALSE);
 
}

void GetSysInfo()
{
  wchar_t szComputerName[MAXBYTE] = {0};
  wchar_t szUserName[MAXBYTE] = {0};
  unsigned long nSize = MAXBYTE;
  OSVERSIONINFO OsVER;
 
  OsVER.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx(&OsVER);
  if( OsVER.dwOSVersionInfoSize == VER_PLATFORM_WIN32_NT)
  {
    if(OsVER.dwMajorVersion == 5 && OsVER.dwMajorVersion == 1)
    {
      printf("Windows xp %s \r\n", OsVER.szCSDVersion);
    }
    else if(OsVER.dwMajorVersion == 5 && OsVER.dwMajorVersion == 0)
    {
      printf("Windows 2k \r\n");
    }
  }
  else
  {
    printf("Other system\r\n");
  }
 
  GetComputerName(szComputerName, &nSize);
  wprintf(L"Computer Name is %s \r\n", szComputerName);
  nSize = MAXBYTE;
  GetUserName(szUserName, &nSize);
  wprintf(L"User Name is %s \r\n", szUserName);
 
}

int main()
{
  Copyself();
  GetSysInfo();
 
  system("pause");
 
  return 0;
}
#14
农民工2015-08-24 08:49
getfilemodulename等函数 也得看工程设置里使用的什么字符集
#15
gsl2222015-08-31 14:30
以下是引用coffeesoft在2015-8-23 19:14:35的发言:

宽字符的话就用宽字符的函数
#include
#include
#include

void Copyself()
{
  wchar_t szSelfName[MAX_PATH] = {0};
  wchar_t szWindowsPath[MAX_PATH] = {0};
  wchar_t szSystemPath[MAX_PATH] = {0};
  wchar_t szTemPath[MAX_PATH] = {0};
 
  GetModuleFileName(NULL, szSelfName, MAX_PATH);
  GetWindowsDirectory(szWindowsPath, MAX_PATH);
  GetSystemDirectory(szSystemPath, MAX_PATH);
 
  wcscat(szWindowsPath, L"\\test.txt");
  wcscat(szSystemPath, L"\\test.txt");
 
  CopyFile(szSelfName, szWindowsPath, FALSE);
  CopyFile(szSelfName, szSystemPath, FALSE);
 
}

void GetSysInfo()
{
  wchar_t szComputerName[MAXBYTE] = {0};
  wchar_t szUserName[MAXBYTE] = {0};
  unsigned long nSize = MAXBYTE;
  OSVERSIONINFO OsVER;
 
  OsVER.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  GetVersionEx(&OsVER);
  if( OsVER.dwOSVersionInfoSize == VER_PLATFORM_WIN32_NT)
  {
    if(OsVER.dwMajorVersion == 5 && OsVER.dwMajorVersion == 1)
    {
      printf("Windows xp %s \r\n", OsVER.szCSDVersion);
    }
    else if(OsVER.dwMajorVersion == 5 && OsVER.dwMajorVersion == 0)
    {
      printf("Windows 2k \r\n");
    }
  }
  else
  {
    printf("Other system\r\n");
  }
 
  GetComputerName(szComputerName, &nSize);
  wprintf(L"Computer Name is %s \r\n", szComputerName);
  nSize = MAXBYTE;
  GetUserName(szUserName, &nSize);
  wprintf(L"User Name is %s \r\n", szUserName);
 
}

int main()
{
  Copyself();
  GetSysInfo();

 
  system("pause");
 
  return 0;
}
用楼主的代码调试了,也遇到同样的问题,后来找到了原因,输出了结果,是楼主把函数调用搞成声明引进的
#16
yuccn2015-09-01 12:07
"   void Copyself();
    void GetSysInfo();
"

吧前面的void 去掉
#17
fuyong02272015-09-05 23:19
把main函数中的两个函数前的void删掉就会调用这两个函数,否则就只是个函数声明,不会被调用的。
#18
linan032015-09-25 17:25
宽字节的字符串:   
 wchar_t szWindowsPath[MAX_PATH] = {0};
 wchar_t szSystemPath[MAX_PATH] = {0};
使用多字节的拼接函数:
 strcat((char*)szWindowsPath, "\\test.txt");
 strcat((char*)szSystemPath, "\\test.txt");

这样组成的字符串肯定是有问题的吧
1