我一直在寻找其他问题而且没有一个解决方案有效,所以我会问自己的问题。
我正在使用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);
答案 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编译器支持此扩展。