在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