sprintf_s未在此范围内声明

SPB*_*SPB 20 c linux tr24731

我有一个使用的C程序sprintf_s.它在Windows中运行良好,但是当我在Linux中编译我的代码时,它会出现以下错误:

sprintf_s was not declared in this scope.
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?

peo*_*oro 30

它不是标准的,你不会在Linux上找到这样的功能.

标准函数snprintf应具有类似的语义.

  • 实际上现在这是错误的...`sprintf_s`是C11库扩展的一部分,是一个可选的实现. (5认同)
  • @Mgretz,你能不能粘贴包名,如果它对你来说不是太麻烦.. (2认同)

gnc*_*ais 7

sprintf_s不是标准C库的一部分,因此它不可移植,因此您无法在Linux中使用它.但是你有snprintf,它非常相似,它可以帮助你完成你想要的.


Ded*_*tor 7

sprintf_s只是附件 K 的一部分,C11 标准的可选附件

附件K

...

K.2 范围

  1. 本附件规定了一系列可用于缓解程序安全漏洞的可选扩展,包括在现有标准头中声明或定义的新函数、宏和类型。

...

K.3.5.3.6 sprintf_s 函数

概要

#define __STDC_WANT_LIB_EXT1__1
#include <stdio.h>
int sprintf_s(char * restrict s, rsize_t n,
const char * restrict format, ...);
Run Code Online (Sandbox Code Playgroud)

(强调)

它从未进入 POSIX(或 Linux)(并且根本没有错过,甚至在委员会中也有关于它的有用性的争论)。

为了获得更好的可移植性,请使用snprintf它作为核心标准的一部分并提供您需要的所有功能。


Alb*_*ros 6

sprintf_s 不是标准C库的一部分,您将无法在Linux中使用它.

但是,snprintf是标准的,应该做同样的任务.