我一直在寻找其他问题,但没有一个解决方案有效,所以我会问自己一个问题。
我在Linux VM上工作,无法编译我的代码,这是我的包含文件,编译器收到的错误及其所引用的代码:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include "ctype.h"
scanf_s("%[^\n]s", filename, maxFilename);
最佳答案
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编译器支持此扩展。
关于c - 函数 'scan_s'的隐式声明[-Wimplicit-function-declaration],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34854858/