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

我在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/

10-10 18:33