0

我对 C 语言还是很陌生,并且在代码块中不断出现错误,这使我无法运行我的程序。我收到错误“函数 printf_s() 和 scanf_s() 的隐式声明。这是我的代码:

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>

int main(void)
{
  int age = 0;
  char name[20];

  printf_s("Enter your age: ");
  scanf_s("%d", &age);

  print_s("Enter your name: ");
  scanf_s("%s", name, sizeof(name));

  printf_s("Your name is %s and you are %d years old.\n", name, age);

  return 0;
}
4

3 回答 3

3

printf_s并且scanf_s仅当__STDC_LIB_EXT1__由库实现定义时才可用。它是从 C11 标准开始添加的。

首先你必须检查__STDC_LIB_EXT1__是否定义,然后只有你应该使用printf_sor scanf_s

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
int main(void)
{
  int age = 0;
  char name[20];
  #ifdef __STDC_LIB_EXT1__
      printf_s("Enter your age: ");
      scanf_s("%d", &age);
      print_s("Enter your name: ");
      scanf_s("%s", name, sizeof(name));
      printf_s("Your name is %s and you are %d years old.\n", name, age);
  #else
      printf("Enter your age: ");
      scanf("%d", &age);
      print("Enter your name: ");
      scanf("%19s", name);
      printf("Your name is %s and you are %d years old.\n", name, age);
  #endif
  return 0;
}
于 2016-05-25T03:55:48.467 回答
1

根据 ISO C 标准,您使用的功能是“可选的”。

显然,与 Code::Blocks 捆绑的编译器/库没有实现此选项。所以你现在的选择是:

  • 不要使用这些功能
  • 使用实现此选项的编译器
  • 使用 jblixr 的答案中所示的条件代码

此外,您可以使用 MinGW(或 MinGW-w64)记录功能请求。

为什么 C 标准包含可选函数?通常这是政治进程的结果;标准委员会中的一个派别想要这个特性而另一个不想要,所以妥协是让这个特性成为可选的。另一个例子是可变长度数组。

于 2016-05-25T04:12:52.283 回答
-2

标准函数名称没有_s,因此程序的标准兼容版本将是

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
int main(void)
{
  int age = 0;
  char name[20];

  printf("Enter your age: ");
  scanf("%d", &age);

  print("Enter your name: ");
  scanf("%19s", name);

  printf("Your name is %s and you are %d years old.\n", name, age);

  return 0;
}
于 2016-05-25T03:28:41.787 回答