我还是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;
}
答案 0 :(得分:3)
printf_s
和scanf_s
仅在库实施定义__STDC_LIB_EXT1__
时可用。它是自C11标准以来添加的。
首先,您必须检查__STDC_LIB_EXT1__
是否已定义,然后才能使用printf_s
或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;
}
答案 1 :(得分:1)
根据ISO C标准,您使用的功能是“可选的”。
显然,与Code :: Blocks捆绑在一起的编译器/库没有实现此选项。所以你现在的选择是:
此外,您可以使用MinGW(或MinGW-w64)记录功能请求。
为什么C标准包含可选功能?通常这是政治进程的结果;标准委员会中的一个派系想要这个功能而另一个派别没有,所以妥协是使该功能成为可选的。另一个例子是可变长度数组。
答案 2 :(得分:-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;
}