函数'scan_s'的隐式声明[-Wimplicit-function-declaration]

时间:2016-01-18 12:30:39

标签: c compiler-errors scanf c11 tr24731

我一直在寻找其他问题而且没有一个解决方案有效,所以我会问自己的问题。

我正在使用Linux VM并且无法编译我的代码,这里是我的包含,编译器收到的错误及其引用的代码:

  

错误:

     

linux.c:156:11:警告:隐式声明函数'scan_s'[-Wimplicit-function-declaration]

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include "ctype.h"

scanf_s("%[^\n]s", filename, maxFilename);

1 个答案:

答案 0 :(得分:1)

scanf_s是编译器可能不支持的边界检查扩展的一部分。使用#ifdef __STDC_LIB_EXT1__查看您的库/实现是否支持它 - 如果不支持,请回到使用类似

的内容
char fmt[16];
sprintf(fmt, "%%%d[^\n]", maxFilename);
scanf(fmt, maxFilename, filename);

fgets(filename, maxFilename, stdin);
if (char *p = strchr(filename, '\n')) *p = '\0';

代替。

请注意,示例的格式字符串中的s是非感性的,不会匹配任何内容(s会吸收任何%[^\n],因为它不是换行符

据我所知,只有Microsoft编译器支持此扩展。