请帮忙。 情况就是这样。 我有一个C ++ / C应用程序。我需要编译所有4个配置(x86调试和发布,x64调试和发布)。 在某些时候,(D和R)x64配置都在编译并运行正常。然后我切换到尝试编译x86版本(D& R)。
当我尝试编译x86 D版本时,我收到一些关于不使用sprintf的警告,因为它不安全,请改用sprintf_s。所以我开始改变我的变量,包括_splitpath到_splitpath_s。但是,我开始在我的更改中遇到一些编译错误,所以我决定撤消我的更改并禁用警告(如警告本身所示)。
一旦我这样做,我就开始收到关于_splitpath的错误。 我不知道发生了什么,所以我决定删除当前版本,并从头开始使用我从另一个交付中获得的备份副本。
当我开始得到相同的_splitpath错误时,我感到很震惊。备份文件夹功能齐全,我不明白为什么它现在无法编译。
我必须更改Visual Studio中的一些设置,这些设置现在影响我尝试编译的任何版本,甚至是我过去成功运行的旧版本。
任何人都可以看看下面的错误并揭开一些亮点吗?我的代码摘录在下面提供。 任何帮助都将受到极大的赞赏。
1>------ Rebuild All started: Project: SBF_Comm, Configuration: Debug x64 ------
1>Deleting intermediate and output files for project 'SBF_Comm', configuration 'Debug|x64'
1>Compiling...
1>StdAfx.cpp
1>SBF_RS232.cpp
1>SBF_PleoraComm.cpp
1>SBF_NullComm.cpp
1>SBF_ImperxComm.cpp
1>SBF_HostComm.cpp
1>SBF_EDTComm.cpp
1>.\SBF_RS232.cpp(90) : error C2660: '_splitpath' : function does not take 5 arguments
1>.\SBF_RS232.cpp(178) : error C2660: '_splitpath' : function does not take 5 arguments
1>.\SBF_RS232.cpp(270) : error C2660: '_splitpath' : function does not take 5 arguments
1>.\SBF_RS232.cpp(417) : error C2660: '_splitpath' : function does not take 5 arguments
1>Build log was saved at "file://c:\WinIRDir\WinIR3\SBF_Comm\x64\Debug\BuildLog.htm"
1>SBF_Comm - 4 error(s), 0 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
下面是2个如何调用_splitpath的例子 此代码从未被修改过,并且编译好多年,现在它们生成了上面的2个第一个错误。 我相信这可能是由于我必须在VisualStudio中意外更改的设置。 有什么想法吗?
// LogFileClear:
static int nCommPort = -1;
char szModuleFileName[MAX_PATH+1],szDrive[_MAX_DRIVE+1],szDir[_MAX_DIR+1],szFile[_MAX_FNAME+1],szExt[_MAX_EXT+1];
GetModuleFileName(NULL,szModuleFileName,MAX_PATH+1);
_splitpath(szModuleFileName,szDrive,szDir,szFile,szExt);
sprintf(szFile,"CommLog%d",m_nCommPort);
_makepath(m_szCommLog,szDrive,szDir,szFile,"txt");
char szModuleFileName[MAX_PATH+1],szDrive[_MAX_DRIVE+1],szDir[_MAX_DIR+1],szFile[_MAX_FNAME+1],szExt[_MAX_EXT+1];
GetModuleFileName(NULL,szModuleFileName,MAX_PATH+1);
_splitpath(szModuleFileName,szDrive,szDir,szFile,szExt);
sprintf(szFile,"CommLog%d",m_nCommPort);
_makepath(m_szCommLog,szDrive,szDir,szFile,"txt");
答案 0 :(得分:0)
我发现了问题。
仔细查看我上面发布的stdlib.h代码的snipet,我注意到它已被更改(很可能是意外)。 _splitpath的第二个和第三个实例已被交换。 我一交换回来,就重新编译,一切恢复正常 我认为将这些包含的文件设置为“只准备好”是个好主意,以避免“大规模更改”发生意外。 谢谢大家的提示,特别是Jim Rhodes指出正确的方向。