1

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

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

1 回答 1

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]因为它不是换行符。

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

于 2016-01-18T17:27:54.280 回答