【问题标题】:Implicit declaration of function 'scan_s' [-Wimplicit-function-declaration]函数“scan_s”的隐式声明 [-Wimplicit-function-declaration]
【发布时间】:2016-04-23 15:09:44
【问题描述】:

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

我正在使用 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);

【问题讨论】:

标签: c compiler-errors scanf c11 tr24731


【解决方案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] 吸收,因为它不是换行符。

据我所知,只有微软编译器支持这个扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多