函数的隐式声明';扫描';[-Wimplicit函数声明]
我一直在研究其他问题,但没有一个解决方案有效,所以我会问自己的问题 我在linux VM上工作,在编译代码时遇到问题,以下是我的include、编译器收到的错误及其引用的代码: 错误: linux.c:156:11:警告:函数“scan_s”的隐式声明[-Wimplicit函数声明]函数的隐式声明';扫描';[-Wimplicit函数声明],c,compiler-errors,scanf,c11,tr24731,C,Compiler Errors,Scanf,C11,Tr24731,我一直在研究其他问题,但没有一个解决方案有效,所以我会问自己的问题 我在linux VM上工作,在编译代码时遇到问题,以下是我的include、编译器收到的错误及其引用的代码: 错误: linux.c:156:11:警告:函数“scan_s”的隐式声明[-Wimplicit函数声明] #包括 #包括 #包括 #包括“ctype.h” 扫描文件(“%[^\n]s”,文件名,maxFilename); scanf_s是边界检查扩展的一部分,您的编译器可能不支持该扩展。使用#ifdef uu STDC
#包括
#包括
#包括
#包括“ctype.h”
扫描文件(“%[^\n]s”,文件名,maxFilename);
scanf_s
是边界检查扩展的一部分,您的编译器可能不支持该扩展。使用#ifdef uu STDC u LIB u EXT1 uu
查看您的库/实现是否支持它——如果不支持,请使用类似
char fmt[16];
sprintf(fmt, "%%%d[^\n]", maxFilename);
scanf(fmt, maxFilename, filename);
或
相反
请注意,示例的格式字符串中的s
是非感官的,不会匹配任何内容(任何s
都将被%[^\n]
吸收,因为它不是换行符
据我所知,只有Microsoft编译器支持此扩展。该函数的可能副本是非常新的,它是在C11标准中引入的,旧的Linux安装可能还没有。请显示确切的代码,或a。错误表明您使用了scan\u s
而不是scan\u s
。
char fmt[16];
sprintf(fmt, "%%%d[^\n]", maxFilename);
scanf(fmt, maxFilename, filename);
fgets(filename, maxFilename, stdin);
if (char *p = strchr(filename, '\n')) *p = '\0';