C++ VisualStudio中可以进行哪些影响所有应用程序的设置?

C++ VisualStudio中可以进行哪些影响所有应用程序的设置?,c++,visual-studio,C++,Visual Studio,请帮忙。 情况是这样的。 我有一个C++/C应用程序。我需要编译所有4种配置(x86调试和发布,x64调试和发布)。 在某个时候,(D和R)x64配置都编译并运行正常。然后我转而尝试编译x86版本(D&R) 当我试图编译x86 D版本时,我收到一些警告,不要使用sprintf,因为它不安全,请使用sprintf_s。所以我开始改变我的变量,包括_splitpath到_splitpath。但是,我的更改开始出现一些编译错误,因此我决定撤消更改并禁用警告(正如警告本身所建议的那样) 一旦我这样做了,

请帮忙。 情况是这样的。 我有一个C++/C应用程序。我需要编译所有4种配置(x86调试和发布,x64调试和发布)。 在某个时候,(D和R)x64配置都编译并运行正常。然后我转而尝试编译x86版本(D&R)

当我试图编译x86 D版本时,我收到一些警告,不要使用sprintf,因为它不安全,请使用sprintf_s。所以我开始改变我的变量,包括_splitpath到_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 ==========
下面是如何调用_splitpath的两个示例。
这段代码从未被修改过,多年来一直编译正常,现在它们生成了上面的两个第一个错误。 我相信这可能是因为我在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");
我发现了问题

仔细查看我上面发布的stdlib.h中的代码片段,我注意到它被更改了(很可能是意外更改的)。_splitpath的第二个和第三个实例已交换。 我一把它们换回来,就重新编译,一切都恢复正常。
我认为将这些包含的文件设置为“仅准备”是一个好主意,以避免在“大规模更改”时发生意外。
感谢大家的提示,特别是感谢Jim Rhodes指出了正确的方向。

为什么不右键单击代码中的一个
\u splitpath
调用,然后选择“转到定义”。这可能会告诉你为什么它不喜欢你用5个参数打电话。你是包括
stdlib.h
还是
cstdlib
?我没有意识到我没有登录,所以我不得不回答“应答”。抱歉,这些文件通常位于程序文件中的某个位置,因此我假设这些文件实际上是只读的(因为写操作需要管理员权限)。你肯定不是以管理员的身份运行VS吗?我在我的开发机器上一直都有管理员权限,但在stdlib.h上运行搜索时,在不同的地方显示了它的6个不同版本(我相信都在程序文件中)。其中只有一个设置为只读(显然不是我正在使用的那个)。我只是在一个只读文本文件设置上做了一个测试,尽管我有管理员权限,但仍然无法保存该文件,我得到了“另存为”对话框。这正是应该发生的。我不明白为什么额外的只读标记会增强这种不可编辑性。