目录
1.1 解析:GetModuleFileName(NULL, szPath, _MAX_PATH))
1、在WinMain()函数中确定程序执行目录
char szPath[_MAX_PATH] = {0}; //定义一个char类型的数组szPath
if (0 != GetModuleFileName(NULL, szPath, _MAX_PATH))
{
char* str = strrchr(szPath, '\\');
if (NULL == str)
{
str = strrchr(szPath, '/');
}
if (NULL != str)
{
*str = '\0'; //去掉后面的文件名称,得到完整路径:从后向前查找字符'\',并将其后字符置为0,作为字符串结尾。
_chdir(szPath);
}
}
1.1 解析:GetModuleFileName(NULL, szPath, _MAX_PATH))
函数
获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。
如果想要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx函数。
函数原型:
DWORDGetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
函数参数
HMODULE hModule 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。
LPTSTR lpFileName 是你存放返回的名字的内存块的指针,是一个输出参数
DWORD nSize,装载到缓冲区lpFileName的最大值
函数返回值
如果返回为成功,将在lpFileName的缓冲区当中返回相应模块的路径,如果所设的nSize过小,那么返回仅按所设置缓冲区大小返回相应字符串内容。
如果函数失败,返回值将为0,利用GetLastError可获得异常代码。
头文件
实例源代码
#include <windows.h>
#include <stdio.h>
BOOL CreateSampleService()
{
TCHAR szPath[MAX_PATH];
if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )
{
printf("GetModuleFileName failed (%d)\n", GetLastError());
return FALSE;
}
return TRUE;
}
/*
如果想获得某个正在运行的EXE或者DLL的全路径可以这样写代码
GetModuleFileNameEx(hProcess,hInst,lpFile,MAX_PATH);//注意下缓冲区就行了。
*/
1.2 解析:strrchr(szPath, '\\')
函数类型
strrchr() 函数(在php中)查找字符在指定字符串中从右面开始的第一次出现的位置,如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。与之相对应的是strchr()函数,它查找字符串中首次出现指定字符以及其后面的字符。
函数简介
函数名称: strrchr
函数原型:char *strrchr(const char *str, int c);
所属库: string.h
函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。使用这个地址返回从最后一个字符c到str末尾的字符串。
#include <string.h>
#include <stdio.h>
int main(void)
{
char string[20];
char *ptr, c = 'r';
strcpy(string, "There are two rings");
ptr = strrchr(string, c);
if (ptr)
printf("The character %c is at position: %s\n", c, ptr);
else
printf("The character was not found\n");
return 0;
strrchr返回的指针应当指向"rings"里的'r',而不是“There”或"are"里的'r'。
运行结果是:The character r is at position:rings
ptr = strrchr(string, c); //返回的指针地址,赋值给ptr,代表c的地址,打印的时候ptr又代表字符串
1.3 解析:_chdir(szPath);
chdir 是C语言中的一个系统调用函数(同cd),用于改变当前工作目录,其参数为Path 目标目录,可以是绝对目录或相对目录。
功 能:更改当前工作目录。
参 数:Path 目标目录,可以是绝对目录或相对目录。
返回值:成功返回0 ,失败返回-1
#include<stdlib.h>
intmain(intargc,char*argv[])
{
charpath[_MAX_PATH];
_getcwd(path,_MAX_PATH);
printf("当前工作目录:\n%s\n",path);
if((_chdir("d:\\visualc++"))==0)
{
printf("修改工作路径成功\n");
_getcwd(path,_MAX_PATH);
printf("当前工作目录:\n%s\n",path);
}
else
{
perror("修改工作路径失败");
exit(1);
}
return0;
}