如何使用scanf中的%ms修复警告

时间:2017-11-14 23:23:25

标签: c

我需要做这样的事情:

scanf("%ms", ...)

并使用

进行编译
g++ -Wall -pedantic -std=c++11 

还有

gcc -Wall -pedantic -std=c99

并打印警告:ISO C不支持'm'scanf标志。 我该如何解决?

3 个答案:

答案 0 :(得分:0)

%ms表示法是scanf()中的POSIX扩展名,与scanf()的标准C版本相比

答案 1 :(得分:0)

onSubmit() { this.setState({value1: '', value2: ''}); } 格式由POSIX指定,而不是由ISO C指定。

通过使用%ms,您已经请求诊断违反C99标准的代码(正如您的行为未定义)。

如果您希望代码可以移植到ISO C99(或C11)实现,请不要使用-Wall -pedantic -std=c99

如果您需要使用%ms(使您的代码不那么可移植,但它应该适用于任何符合POSIX的实现),请不要使用这些选项。删除%ms选项似乎足以抑制警告。 gcc之外的编译器可能有不同的选项来实现这一点(虽然clang非常密切地复制gcc)。

答案 2 :(得分:0)

回答:放弃-pedantic,或放弃%ms。他们没有走到一起。

AFAIK,没有像ISO C标准中的%ms格式说明符。它被POSIX添加为扩展名。

命令行参数-pedantic告诉GCC 严格遵循ISO C标准,因此它不接受带有该选项的%ms

如果您的程序定位到POSIX系统,那么删除-pedantic就可以了。否则,如果您想使代码可移植,请不要在%ms / printf中使用scanf