我在显示文件目录时遇到问题。我使用_splitpath
函数来剪切文件方向和文件名。然后,我使用strcat
来连接驱动器名称和目录。我也用这个函数作为文件名,它很好。我注意到我不能直接连接到驱动器,因为驱动程序的缓冲区大小只有3.所以,我将驱动器连接到另一个字符数组,然后与目录连接。这就是问题所在。当我放置断点并进行调试时,_splitpath行之后会出现异常。我不知道如何修复它,请帮我解决我的问题。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char szPath[256] = {NULL};
char cDirCheck = '\\';
char szDrive[_MAX_DRIVE] = {0};
char szDir[_MAX_DIR] = {0};
char szFileName[_MAX_FNAME] = {0};
char szExt[_MAX_EXT] = {0};
char pszPath[256] = {NULL};
char* pszFname = NULL;
if(cDirCheck != NULL) {
_ splitpath(argv[0], szDrive, szDir, szFileName, szExt);
strcat(pszPath, szDrive);
strcat(pszPath, szDir);
pszFname = strcat(szFileName, szExt);
printf("\nUsage: %s fileName\n", pszFname);
printf("EXE Path:%s", pszPath\n);
} else {
printf("\nUsage: %s fileName\n", argv[0]);
printf("EXE Path : Current Folder\n");
}
return 0;
}
您可能认为文件路径和文件名输出正确,但else语句的最后一个printf只显示“EXE Path:”。我也不知道为什么会这样。请给我一些想法。关于......
答案 0 :(得分:0)
试试这个。这是程序的精简版,显示实际发生的情况:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char szDrive[_MAX_DRIVE] = {0};
char szDir[_MAX_DIR] = {0};
char szFileName[_MAX_FNAME] = {0};
char szExt[_MAX_EXT] = {0};
_splitpath(argv[0], szDrive, szDir, szFileName, szExt);
printf ("argv[0] = %s\n\n", argv[0]) ;
printf ("szDrive = %s\n", szDrive) ;
printf ("szDir = %s\n", szDir) ;
printf ("szFileName = %s\n", szFileName) ;
printf ("szExt = %s\n\n", szExt) ;
return 0;
}
argv[0]
实际上是您在cmd窗口中键入的用于调用程序的命令的名称。因此,如果您输入dircut
,则argv[0]
为dircut
,如果您输入dircut.exe
,则argv[0]
为dircut.exe
,如果您输入c:\xxx\dircut
},argv[0]
为c:\xxx\dircut
,依此类推。
试验:
S:\>s:\dircut\debug\dircut.exe
argv[0] = s:\dircut\debug\dircut.exe
szDrive = s:
szDir = \dircut\debug\
szFileName = dircut
szExt = .exe
S:\>s:\dircut\debug\dircut
argv[0] = s:\dircut\debug\dircut
szDrive = s:
szDir = \dircut\debug\
szFileName = dircut
szExt =
S:\>cd dircut\debug
S:\dircut\Debug>dircut.exe
argv[0] = dircut.exe
szDrive =
szDir =
szFileName = dircut
szExt = .exe