首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么即使在包含<cstdio>之后,g++也显示"gets()“未声明

在C++11标准中,函数gets()已被废弃,并且在C++14标准中已被移除。gets()函数用于从标准输入流中读取字符串,但它存在安全漏洞,容易导致缓冲区溢出。因此,不推荐使用gets()函数。

在包含<cstdio>头文件后,g++编译器仍然显示"gets()未声明"的原因是,g++编译器默认启用了严格的编译模式(strict mode),该模式要求所有使用的函数必须在编译时可见且已声明。由于gets()函数已被废弃并移除,因此在严格模式下,g++编译器会报错。

为了解决这个问题,可以使用更安全的替代函数fgets()来读取字符串。fgets()函数在<cstdio>头文件中声明,并且在C++中是合法的。fgets()函数的用法如下:

代码语言:txt
复制
#include <cstdio>

int main() {
    char buffer[100];
    fgets(buffer, sizeof(buffer), stdin);
    // 处理输入的字符串
    return 0;
}

fgets()函数从标准输入流中读取字符串,并将其存储在指定的缓冲区中。它需要指定缓冲区的大小,以防止缓冲区溢出。此外,fgets()函数还可以指定要读取的最大字符数和要读取的流(例如stdin表示标准输入流)。

腾讯云提供了丰富的云计算产品和服务,其中包括与C++开发相关的产品。您可以参考腾讯云的官方文档和产品介绍页面,了解更多关于云计算和C++开发的内容:

  • 腾讯云官方文档:https://cloud.tencent.com/document
  • 腾讯云C++ SDK:https://cloud.tencent.com/document/sdk/Cpp
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云函数计算(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云视频处理(VOD):https://cloud.tencent.com/product/vod
  • 腾讯云音视频通信(TRTC):https://cloud.tencent.com/product/trtc

请注意,以上链接仅为示例,具体的产品和服务选择应根据实际需求进行评估和选择。

相关搜索:Unicons即使在链接之后也不会显示即使在正确包含模块之后,也不会定义Google places即使在脚本之前包含app.js之后,jquery也不能工作在Android上即使在点击事件之后也显示以前的文本即使在调用pygame.display.update()之后,Pygame显示也不会更新为什么即使在配置SMTP之后,prestashop电子邮件也不能工作?即使在插入值之后,TextFormField也会显示错误消息(使用表单颤动)即使在react钩子中使用useContext()之后,值也不会传递和显示为什么我的fetch响应即使在读取响应流之后也会显示承诺?即使在赋值之后,类的私有变量成员也会显示垃圾数据即使在实现重定向之后,搜索引擎也会显示旧的URL为什么我的ng-class即使在false时也会显示?为什么即使在迁移之后也会抛出错误?(无此表: accounts_userstripe)即使在将链接添加到index.html之后,也不显示角度材质图标为什么我的Python3 pip包即使在PyPi上显示也不能工作?即使在收到错误500之后,SOAP UI也会显示faultstring。需要在JAVA中查看相同的内容即使在升级CLI之后,也会显示该错误-要求在Angular项目中运行serve命令,但找不到项目定义默认的印地语字体即使在实现了任何类型的印地语字体之后也会显示。Android Studio为什么我的模型即使在精度>93之后也能给出同样的结果?结果>>数组([[1.,0.,0.]],dtype=float32)为什么在eclipse中使用"step into“时,即使没有步骤过滤器,对构造函数的调用也不显示?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • ubuntu gcc编译时对’xxxx’未定义的引用问题

    本文由乌合之众 lym瞎编,欢迎转载blog.cnblogs.net/oloroso 本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso 例如: g++ -o spider...但是链接为可执行文件的时候就必须要具体的实现了。如果错误是未声明的引用,那就是找不到函数的原型,解决办法这里就不细致说了,通常是相关的头文件未包含。...但是看上面编译的时候是有添加-ldl选项的,那么为什么不行呢? gcc 依赖顺序问题 这个主要的原因是gcc编译的时候,各个文件依赖顺序的问题。...gcc编译的时候,如果文件a依赖于文件b,那么编译的时候必须把a放前面,b放后面。...g++ -o spider bloomfilter.o confparser.o crc32.o dso.o hashs.o md5.o qstring.o sha1.o socket.o spider.o

    7.9K20

    文件操作

    权限,此文件权限会参考 umask 值....[putc][putchar][puts][ungetc] 对文件的读和写是最常用的文件操作.C语言中提供了多种文件读写的函数:(使用以下函数都要求包含头文件cstdio.)...读取字符的结果可以不向字符变量赋值 (例如:  fgetc(fp); 但是读出的字符不能保存) 文件内部有一个位置指针,用来指向文件的当前读写字节位置,文件打开时,该指针总是指向文件的第一个字节....每写入一个字符,文件内部位置指针向后移动一个字节. fputc 函数有一个返回值,如写入成功则返回写入的字符,否则返回一个 EOF .可用此来判断写符,写入一个文件,再把该文件内容读出显示屏幕上....(由标准输入设备内读进一字符串) 头文件: #include 函数声明: char * gets(char *s); 说明: gets() 用来从标准设备读入字符并存到参数 s 所指的内存空间

    1.5K20

    使用vs2019进行Linux远程开发的方法步骤

    经过上述步骤之后你就可以vs里调试自己编写的跨平台程序了。 使用vs2019进行Linux远程开发 简介到此结束了,下面我们来看看在vs2019进行Linux开发的图文教程。...远程计算机是调试中的远程连接管理器中添加的。这里一般不需要改动,除非你需要改变项目的类型或编译结果的存放位置。如果有多个远程环境时,可以在这里进行选择。...默认复制的路径通常已经包含了Linux上大部分的头文件,通常我们不需要做更改。头文件的同步发生在第一次构建项目成功后或添加远程连接后手动同步。...其他设置与Windows上进行开发时一样,vs可以自动转换成g++的参数,这里就不再赘述。 添加远程环境 有了远程环境我们才能同步头文件或者进行调试运行。...另外当你使用例如boost这类第三方库时,需要注意。Windows上我们通常指定好附加包含目录和附加库目录即可正常编译,但是Linux上必须明确指定链接库的名字,因此我们项目属性中进行设置。

    4.3K40

    【C】文件操作

    相关的一个函数为puts, 其函数原型为: extern int puts(const char *__str); puts不可指定输出流, 默认会输出到标准输出流(stdout), 除此之外puts输出完内容之后会在内容后面追加上换行符...当读到文件末尾时, 会返回EOF, 并且输出流中设置文件结束标志(end-of-file indicator)....115 32 105 115 32 97 32 116 101 115 116 46 46 46 -1 -1 -1 当读到文件末尾时返回EOF(即-1), 而ascii码中没有-1的对应值, 所以会显示乱码...读取完成后会在str后面追加上 终止null字符 (即\0), 这也是第一条为什么只读 num-1 个字符的原因. 函数返回值是一个指向str的指针....参考文章 http://www.tutorialspoint.com/cprogramming/c_file_io.htm http://www.cplusplus.com/reference/cstdio

    59410

    Linux编译C++

    创建C++编译环境 安装VIM PLUS 为什么安装VIM PLUS: 可以为我们提供良好的编译环境,高亮代码,智能提示等等~ git clone https://github.com/chxuan...或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能。...Read-Eval-Print Loop,交互式解释器)、C++ 和 Python 插件,位于 Xcode 窗口底部控制台中,也有其他 IDE 加入了 LLDB 调试器,如** CLion**,当然其可以...int *b){ int temp; temp = *a; *a = *b; *b = temp; } func.h #pragma once #include void change(int *a,int *b); VimPlus如图所示: g++ -g main.cpp func.cpp -o out 我们详细描述一下这条指令的执行过程 g+

    22.8K50

    头文件是必须的吗?跟一跟编译过程~~~

    预处理阶段会将#include包含的文件直接插入到源文件.cpp中去。头文件实际上并不会被编译,编译器只会编译源文件。只是在编译之前,会将源文件中#include包含的文件源文件中展开。...而且头文件中还包含其他头文件,不知道得向上追溯多少级才到头?实际上没人这么做,Jungle只是想看看这里面的东西。...当然,你可以声明多次。 那么main.cpp中能否把func()声明删掉呢? 看来不行,报错说该作用域内func没有声明。...不知道原理没关系,一步一步试下! 首先预处理肯定没问题,预处理只是原地展开而已。而且上面的测试我main.cpp中删掉了func()声明,就等于main.cpp中删掉#include。...本文只是就着这个问题,跟了下编译的过程,看看平常开发过程中遇到的编译报错“未定义的引用”、“未声明的变量”这些错误来源是哪原因是什么。

    2.1K10

    EasyC++44,单独编译

    coordin.h当中我们声明了两个函数,自然我们就要完成这两个函数的实现: #include #include #include #include...还有虽然我们用到的函数实现是coordin.cpp当中实现的,但我们并不需要将它include进来。而是之后编译的时候连接进来。...g++ -o coordin.cpp 编译之后,我们将会得到一个coordin.o文件,我们再继续编译main.cpp文件: g++ -o main.cpp 这样我们就得到了两个.o文件,最后,我们需要把这两个....o文件连接到一起编程一个可执行文件: g++ coordin.o main.o -o cur 当然,我们可以把main.cpp的编译和连接步骤合并在一起: g++ main.cpp coordin.o...当然大型项目当中,我们一般不会手动编译项目,而会使用例如make等一些自动编译脚本。

    33810

    如何避免JavaScript中的内存泄漏?

    即使代码中存在内存泄漏,浏览器在运行时不会返回任何错误。如果注意到页面的性能逐渐下降,可以使用浏览器内置的工具来确定是否存在内存泄漏以及是哪个对象引起的。...,它可以显示每个标签的 JavaScript 内存占用情况。...队列内存使用快照的比较可以显示两个快照之间分配了多少内存以及分配的位置,并提供额外信息来帮助识别代码中存在问题的对象。...而在JavaScript的开发中,一些错误会导致局部变量被转换到了全局,尤其是非严格的代码模式下。下面是两个常见的局部变量被转化到全局变量的情况: 为未声明的变量赋值 使用this指向全局对象。...此外,由于document 不能被移除,触发方法中的内容会一直驻留内存,即使只使用它触发一次。

    32940

    javascript 中的 delete

    正如您所见到的,执行上下文逻辑上形成一个堆栈.首先是全局代码及其执行上下文;而全局代码可以调用一个函数,有函数自己的执行上下文,该函数可以调用另一个函数,等等等等.即使函数递归地调用其本身,每一次调用会进入一个新的执行上下文...为什么console中声明的变量可以被删除,和我们刚刚学到的相反呢?...,关于函数的声明会覆盖同名的变量(原理是context中,变量声明被提前到整个context最前面,function声明被提前,但应该是function声明被 提到变量声明之后,所以...): [javascript...正如您所见到的,执行上下文逻辑上形成一个堆栈.首先是全局代码及其执行上下文;而全局代码可以调用一个函数,有函数自己的执行上下文,该函数可以调用另一个函数,等等等等.即使函数递归地调用其本身,每一次调用会进入一个新的执行上下文...,关于函数的声明会覆盖同名的变量(原理是context中,变量声明被提前到整个context最前面,function声明被提前,但应该是function声明被 提到变量声明之后,所以...): [javascript

    3K80

    VS2017开发Linux平台上的程序

    首先为了支持远程调试,Linux那边需要安装一些服务 sudo apt-get install openssh-server g++ gdb gdbserver 这里我一开始发现Linux不能联网,原来是之前实验室里设置了静态...#include #include #include #include void* thread_func(void...菜单:工具->选项->跨平台中,可以看到远程连接地信息 ? 编译会出错,提示找不到pthread_create和pthread_join,但是我加了-pthread编译选项啊?...之后就是F7组建、F5调试了,注意要在控制台显示结果必须打开Linux控制台(菜单:调试-Linux控制台) ?...原因是更改了UTF-8之后,原来代码中的中文没有自动转换成UTF-8编码,但是显示的还是中文而非乱码,所以需要把中文部分全部删除然后再次键入,之后就成功了 ?

    2.3K10

    C++学习:从基础到QT实现

    include int main(int argc, char **argv) { std::cout<<"第一个c++程序"<<std::endl; return 0; } 编译: g+...++语言中使用标准c库, 1.比如#include --->#include 2.c++中使用非标准库 extern "C" { #include "...<<b<<" "<<c<<std::endl; 注意:默认cout,cin只能对基本数据类型,和字符串输入输出,其他自定义类型需要自己重载输出输入运算符 练习: 用c++的输入输出实现学生数据初始化和显示学生信息...c++里面自带的头文件比如, cstdio, cstdlib, cstdbool 非标准c库函数 自定义的库函数比如:calc.h, calc.c calc.h #ifndef _CALC_H...2、 定义两个命名空间A 和 B 分别在A中和B中定义变量value main函数中将两个空间的value打印出来。 3、const int a; C++编译器中是否需要初始化,为什么

    77020

    【Linux】软硬链接与动静态库

    接下来我们看一个现象:为什么目录文件硬链接数为2?  答案是很简单,因为每一个目录文件,即使是个空目录,里面一定有如下内容:当前路径文件.和上级路径文件..。  ...是因为我们包含了各自对应的头文件,而头文件的内容包含了该函数的声明,具体的实现方法则在库文件中,链接阶段,我们经过编译后的.o文件会与库文件进行合并,最终形成可执行程序。...为什么要存在库? 库的存在就是为了提高开发效率,举个例子,假如没有c/c++标准库,我们写代码时就要手动将printf、cout等高频函数的实现方法进行编写,这样就大大减少了我们的开发效率。...+默认采用动态链接,但是假如只存在静态库,则gcc/g++只会进行静态链接,同样,只存在动态库,只能进行动态链接(即使我们加上 -static)。...而若动静态库同时存在,则gcc/g++会默认进行动态链接。可以手动指定进行静态链接(-static) end. 生活原本沉闷,但跑起来就会有风!

    21430

    【Linux】Linux 编译器与调试器 -- gccg++gdb 的使用

    Linux下我们可以通过如下命令来得到编译之后的代码: gcc -S test.i -o test.s # -S:表示让代码完成编译后停下来,不再继续往后编译 # 编译产生的文件一般以....Linux下我们可以通过如下命令来得到编译之后的代码: gcc -c test.s -o test.o # -c:表示让代码完成编译后停下来,不再继续往后编译 # 汇编产生的文件一般以.o为后缀...,所以运行不了过大的可执行程序; 虽然动态链接受函数库变动的影响,但是函数库一般很少会变动,即使变动必须兼容以前的版本,所以影响不大; Linux下,我们可以使用 “file” 指令来辨识文件类型,...---- 3、gcc/g++ 的使用 其实上面在学习预处理、编译、汇编、链接时我们就已经使用 gcc/g++ 了,只是比较零散,下面我们来系统的学习一下 gcc/g++。...,它不包含调试信息,因为用户不负责不关心如何对程序进行调试。

    1.7K00

    JavaScript秘密笔记 第一集

    独立的js文件中编写js程序 强调: js文件中,只包含js程序,不必添加 再在页面中用引入 优: 一次定义处处使用,一次修改处处生效!...所有字符串,必须放在引号中,但单双引号均可 问题: 如果字符串内容中包含引号 解决: 将内部的引号和外部的引号分别用单双引号区分开。 3. 每条语句必须用分号结尾 4....控制台(console): 显示错误的原因和出错的位置 输出: 3种: 1....输出到控制台: console.log(“输出的内容”) 控制台 记录 一句话 控制台的使用: 什么是: 编写,调试并查看程序输出的小窗口 为什么: 即不影响页面,又不阻碍用户操作....驼峰命名: 首字母小写,之后每个单词首字母大写!

    80730
    领券