在C中查找文件目录和文件名
我在显示文件目录时遇到问题。我使用了在C中查找文件目录和文件名,c,C,我在显示文件目录时遇到问题。我使用了\u splitpath函数来剪切文件方向和文件名。然后,我使用strcat连接驱动器名和目录。我还使用这个函数作为文件名,它还可以。我注意到我不能直接连接到驱动器,因为驱动器的缓冲区大小只有3。所以,我将驱动器连接到另一个字符数组,然后连接到目录。问题来了。当我放置断点并调试时,在_splitpath行之后会出现异常。我不知道如何解决它,所以,请帮我解决我的问题 #include <stdio.h> #include <string.h&g
\u 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;
}
#包括
#包括
#包括
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(“\n用法:%s文件名\n”,pszFname);
printf(“EXE路径:%s”,pszPath\n);
}否则{
printf(“\n用法:%s文件名\n”,argv[0]);
printf(“EXE路径:当前文件夹\n”);
}
返回0;
}
您可能认为文件路径和文件名输出正确,但else语句的最后一次printf仅显示“EXE path:”。我也不知道为什么会这样。请给我一些想法。关于……试试这个。这是程序的精简版本,显示实际发生的情况:
#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;
}
顺便说一句,你的程序只有在一些拼写错误被纠正后才能编译。测试
cDirCheck!=NULL
始终为真,因此它是无用的。但除此之外,你的程序在这里运行良好。您正在编写_splitpath之后的异常。告诉我们更多关于这一点。当我使用断点和调试器时,正如您所说,“mov ecx,[esp+4];ecx->dest strin cx0013:Error:missing operator”,出现了这个错误。请你解释一下是关于什么的。谢谢你纠正我的错误。英语不是我的母语,我的英语不是很好。你使用哪种操作系统和哪种编译器/visual studio?Windows 7 Enterprise和visual studio 2010 Express。谢谢你的帮助,Micheal。很抱歉占用了你的时间。谢谢你的回答,这就是Stackoverflow的用途。如果答案是你想要的,请接受。
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