#include <stdio.h>
int main (void) {
char str[100];
scanf_s ("%[^n]", str);
printf ("%sn", str);
return 0;
}
此代码可以在MinGW GCC 11.3.0下编译成功,没有任何错误和警告,exe文件运行正常,没有任何异常。与MSVC中的同名函数不同,MinGW GCC中的scanf_s函数在用于输入字符串时不需要第三个参数。函数scanf_s如何在MinGW GCC中工作?
ISO C版本和Microsoft版本的scanf_s
都要求每次使用%s
转换格式说明符时,都提供一个指定缓冲区大小的附加参数。这可能也适用于您的版本的MinGW所使用的库。
由于没有向scanf_s
提供所需数量的参数,您的代码具有未定义的行为。你的程序可能编译甚至正常运行的事实并不能改变你的代码有未定义行为的事实,也就是说,任何事情都可能发生,包括它可能按预期工作的可能性。你不能依赖这个行为。