本人小Bai刚开始学,今天偶然发现还有get_s这个函数,但是在dev cpp和QT上都试了一下,发现不管怎么改都是会报错,网上的代码直接copy下来也还是报错。后来偶然间看到,好像gets_s只能在VS里用,想问一下各位老哥,是不是这样的
函数名后有_s是vs特有的,有些其他编译器也支持。
从C11开始gets已经被淘汰了,改为了gets_s。因此你的编译器要支持c11,编译参数添加-std=c11。
推荐使用fgets
后辈总自以为比前辈进步,其实很多情况下都是退步。
类库版本不一样,低版本只支持gets,高版本gets会报错不安全,必须使用gets_s,或者在define里声明不报错
可以在vs中设置一下,就可以用get了,这个跟vs中的安全规范有关
你可以封装一下支持所有编译器
#include <stdio.h>
#include <string.h>
char *my_gets(char *buffer, size_t size)
{
#if defined(_MSC_VER) && _MSC_VER >= 1928
// For VS2019 16.8 and later versions
return gets_s(buffer, size);
#elif __cplusplus >= 201103L || __STDC_VERSION__ >= 201112L
// For C11 enabled compilers
fgets(buffer, size, stdin);
// Remove the newline in the buffer.
char *p = buffer + strlen(buffer) - 1;
if (*p == '\n')
*p = '\0';
return buffer;
#else
// Fallback
return gets(buffer);
#endif
}
int main()
{
const int BUFFER_SIZE = 255;
char buffer[BUFFER_SIZE];
my_gets(buffer, BUFFER_SIZE);
puts(buffer);
return 0;
}