C sprintf(新路径,“%s%s,”,…)的类似物是什么?

C sprintf(新路径,“%s%s,”,…)的类似物是什么?,c,visual-studio-2010,C,Visual Studio 2010,我正在使用sprintf(newpath,“%s%s”,cCurrentPath,\\init.scm)将\init.scm添加到当前目录路径,但通常会出现警告: 警告C4996:'sprintf':此函数或变量可能不安全。 考虑使用SeaStffs代替。要禁用弃用,请使用 _CRT\u安全\u无警告。 Sprintf_s不支持这样的“%s%s”字符串和。如何使用sprintf\u s?sprintf\u s与sprintf基本相同,但它得到另一个参数: sprintf_s(newpath, s

我正在使用sprintf(newpath,“%s%s”,cCurrentPath,\\init.scm)将\init.scm添加到当前目录路径,但通常会出现警告:

警告C4996:'sprintf':此函数或变量可能不安全。
考虑使用SeaStffs代替。要禁用弃用,请使用
_CRT\u安全\u无警告。


Sprintf_s
不支持这样的“%s%s”字符串和。如何使用
sprintf\u s

sprintf\u s
sprintf
基本相同,但它得到另一个参数:

sprintf_s(newpath, sizeof(newpath), "%s%s", cCurrentPath, "\\init.scm");
注意-如果
newpath
是普通字符数组,则
sizeof(newpath)
有效。如果是作为参数传递的指针或数组,则可能需要另一种方法来获取大小。

您也可以在非MS环境中出于同样的目的使用
snprintf

Sprintf\u s不支持这样的“%s%s”字符串和?你确定吗?(顺便说一句,当你谈论字符串时,它通常被称为串联,而不是“求和”。)是的,它显示了警告C4024:“sprintf_s”:形式参数和实际参数2的不同类型,在运行时失败。我不这么认为,因为sprintf工作得很好。这是代码中的一个错误。正如ugoren指出的,这两个函数的工作方式相同。您传递的参数不正确。您在
“\init.scm”
中也缺少反斜杠-您需要一个反斜杠“\”。但是%s%s是指向newpath的两个字符串的总和。如何实现?这些函数是为了安全而构建的,因此您不会试图覆盖未分配的内存。因此,第二个参数必须是为第一个参数分配的内存大小)它与以下参数无关,它确保在实际文本长于预期时不会出现内存访问冲突。抱歉,我忽略了格式字符串。现在已修复,您可以像我写的那样使用它。可能需要使用
\u countof(newpath)
以避免将来出现错误(例如,将代码转换为使用
swprintf\u s
)。或者,如果使用C++,只需使用<代码> SpaFrfsS(NeWPATH,%S%S),CurrutPATH,\\init .SCM);代码>(假设缓冲区是本地的)。