vs2019中c++中gets()报错未定义标识符

C/C++中gets函数被废弃的原因与安全替代方案fgets详解 缓冲区溢出是C/C++编程中常见的安全漏洞,其根源在于不安全的字符串处理函数。这类函数如gets、strcpy等,由于缺乏边界检查,容易导致内存越界写入,引发程序崩溃或安全风险。为了解决这一问题,C11/C++14标准正式废弃了gets函数,并引入了更安全的替代方案。fgets函数通过指定读取字符数上限,从根本上杜绝了缓冲区溢出,是现代C/C++编程中处理标准输入的标准做法。本文围绕gets函数废弃这一技术演进,深入解析了其安全缺陷、编译器行为变化,并提供了从fgets基础用法到动态内存分配的最佳实践方案, 阅读详情
AI摘要

本文讲述了在使用科学计算器开发过程中遇到gets()函数未定义的问题,通过引入标准库中gets_s()函数来修复,并介绍了相关头文件的正确引用。

今天在做科学计算器的时候遇到一个问题,就是我在头文件已经添加了#include<string.h>和#include<string>这两个头文件,但是编译时还是报错:gets()未定义标识符

后来查了一些资料,发现可以通过在gets()后面加上_s解决,即gets_s()

 

C++程序结构与cout输出流:从Hello World到工程实践 在计算机编程中,程序的基本结构是构建所有软件的基础,它定义了代码的组织方式和执行入口。理解程序结构的工作原理,有助于掌握计算机如何解析和执行指令。输出流是程序与外界交互的关键机制,它负责将数据从程序内部传输到外部设备,如屏幕或文件。在C++中,cout作为标准输出流对象,通过流插入运算符实现数据输出,这种设计体现了流式I/O的高效性和灵活性。掌握cout的格式化输出、缓冲区管理以及与命名空间的配合,对于开发调试工具、日志系统和用户界面至关重要。本文以C++入门教学为场景,深入解析cout语句和程序骨架,帮助 阅读详情

相关推荐

C语言字符串内存模型与安全编程实践详解

在计算机编程中,字符串处理是基础且核心的技术概念。从内存原理来看,字符串本质上是字符序列在内存中的连续存储,其操作依赖于指针运算和内存管理。理解这一原理对于编写高效、安全的程序至关重要,尤其在系统编程和嵌入式开发领域。C语言中的字符串以空字符'\0'作为终止符,这一设计决定了标准库函数如strlen、strcpy等的工作原理。然而,不安全的字符串操作容易导致缓冲区溢出等严重安全漏洞,因此需要掌握strncpy、strlcpy等安全函数的使用。在实际工程中,正确处理字符数组与字符指针的内存差异、动态内存分配以

weixin_34006965的博客 375

VS报错 “E0020 未定义标识符 “gets“ ”解决方案

解决方案就是把 gets换成gets_s gets函数存在缓冲区溢出漏洞,使用gets函数的程序有缓冲区溢出的风险 如果读入str的是一个精心构造的字符串,就会引起缓冲区溢出,导致程序流程改变。 gets()函数 1.描述 C 库函数 char *gets(char *str) 从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。 gets(str) 约等于 scanf(“%s”,&str) 会把读到的字符串写入数

CNMBZY的博客 3万+

【C语言】标准内容介绍(C99)

1967 年,剑桥大学的马丁·理查兹(Martin Richards)对 CPL(CPL 是一种非常接近硬件的语 言。非常复杂,实现困难)语言进行了简化,设计出了 BCPL(Basic Combined Programming Language,基本组合编程语言)语言。1970 年,肯·汤普森(Ken Thompson)以 BCPL 语言为基础,设计出了 B 语言(BCPL 首字母)。随即用 B 语言写出了 UNIX 操作系统。...

m0_62599305的博客 6041

gets() C++ E0020错误:未定义标识符 C3861错误:找不到标识符

gets() C++ E0020错误:未定义标识符 C3861错误:找不到标识符

weixin_43744390的博客 6021

保姆级教程:用LoRA微调Chinese-Mistral-7B模型,并一键部署到Ollama(附完整代码)

本文提供了一份详细的LoRA微调Chinese-Mistral-7B模型的保姆级教程,涵盖环境配置、数据预处理、微调实战、模型量化及Ollama部署全流程。通过实战案例和完整代码,帮助开发者快速构建专属中文大模型,适用于医疗、法律等垂直领域。

weixin_30369041的博客 250

STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)

STM8S全解析之系列文章4—STM8S芯片项目升级引导程序(使用中断接收升级数据) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)前言一、Flash划分boot和App二、使用步骤1.引入库2.读入数据总结 前言 用过STM8S都知道它没有中断向量重定向,也就意味着STM8S的中断向量没办法指向其他的位置,间接说明升级的引导

weixin_39853312的博客 1031

mysql:Column id cannot be null

一、问题 由于在项目中更改了数据库的字段,然后再连接测试的时候发现总是说:Column 'id' cannot be null 这个问题,也就是数据库的id不能为空,因为是主键。 二、问题解决 其实很简单,可能是自己改动了数据库,然后主键id不是自动增长了,只需要将数据库的字段id设置为自动增长,问题解决了。...

好好学java 6万+

华为MA5620配置宽带及语音实例

华为EPON配置实例1、公共部分和宽带PPPOE部分用串口用户名密码root/mduadminMA5620E>enableMA5620E#configMA5620E(config)#MA5620E(config)#sysnamebigcow/给设备起名字/****之前为公共部一、建vlan和地址bigcow(config)#vlan100...

weixin_33862041的博客 6348

C++报错:“gets”: 找不到标识符

c++未定义的标识符gets

aka_hana的博客 3568

基于深度强化学习的无地图移动机器人导航:让机器人在未知环境中智能前行

虽然仍然面临sim-to-real差距、安全性保证等挑战,但随着算法的不断改进和计算能力的提升,基于DRL的无地图导航技术将在服务机器人、工业自动化、太空探索等领域发挥越来越重要的作用,为人类生产和生活带来更大便利和价值。对于复杂环境下的动态目标导航问题,研究人员提出了多智能体协同控制算法(如Teamwork-Net算法),通过多个智能体分别控制机器人的运动速度与运动方向,协同实现更高效、更稳定的导航性能。深度强化学习结合了深度学习的感知能力和强化学习的决策能力,非常适合解决无地图导航问题。

weixin_45131592的博客 903

F280049C Buffered Digital-to-Analog Converter (DAC)

使用DAC模块很简单,只需要配置参考电压,并写入DACVALS寄存器一个数字值即可。参考电压可配置为外部参考VDAC和内部参考电压1.65V和2.5V,并结合增益作为DAC模块最终的参考电压DACREF。举个例子,配置参考电压为内部参考电压1.65V,增益设置为2,则参考电压DACREF=3.3V,若向DACVALS写入数字值2048,则输出的DAC模块的输出带电压DACOUT=DACVALS×DACREF4096=1.65VDACOUT=

xht2403267701的博客 2370

E002未定义标识符;C3861"gets"找不到标识符问题vs2017

gets(str);/*该情况下出现标题所述错误*/ 修改后: gets_s(str);/*2017版本是用的新标准,需要将"gets"改成"gets_s"*/

gentlebreeze_ws的博客 2519

[Dify] 【实战笔记】优化 Excel 电话簿类知识库检索效果的实战技巧

摘要:文章分析了Dify知识库在处理Excel结构化数据(如电话簿)时出现的检索异常问题,发现主要原因是默认召回多条记录且缺乏精准匹配机制。提出两个核心解决方案:1)优化知识库召回参数,包括调整TopK值、提高关键词权重等;2)设计精准提示词模板,明确约束模型行为范围。通过对比测试验证了优化效果,并给出进阶建议如数据格式转换、输出格式化等。最后针对知识检索类AI应用提供了场景适配建议。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 367

error C3861: “gets”: 找不到标识符

error C3861: “gets”: 找不到标识 把“gets”改成“gets_s” 用VS2015打开一个win32工程,生成解决方案失败。报错信息:命令行 error D8016: “/ZI”和“/Gy-”命令行选项不兼容 选中项目,点击属性,弹出项目属性对话框 选择C/C++ -> 常规 -> 调试信息格式 -> 选择 程序数据库 (/Zi) ...

newzhpfree的博客 4071

富芮坤fr8008gp 240X280 lvgl项目启动

fr8008gp_240X280_lvgl项目启动

cheng___yi的博客 1758

AMS TMF8820/21/28 SPAD 掩码和模式选择

为了实现最快的测距周期,将报告周期设置在测距周期以下的毫秒,以确保不会有等待时间。除了8X8固定了pixel的位置意外,其他模式客户可以设计自己的spad掩码,并将spad单独分配给通道。对于这些spad掩码,有一些约束。左下角提示红色代表光学中心,绿色方框表示单个spad,每个MP里可能有2X3个spad,也有2X5个spad,也有3X6+3个spad,这部分适配光学,最大的程度的利用spad区域。以下是几种预定义的spad掩码,非常灵活的配置,来适配各种3X3,4X4,8X8的模式选择。

dream it possible 700

Visual Studio 2019碰到的几个问题(C3861,RC1015,C2039等)

最近在Visual Studio 2019中碰到的几个问题:C3861,RC1015,C2039等,另外还有一个启动调试时碰到‘系统找不到相应的文件’问题,解决了这些问题。

scruffybear的专栏 1677

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【新手村】从C到C++过渡必读知识,输入输出篇超详细

值得注意的是,如果在visual studio里使用scanf()函数的话,必须在写头文件的地方加上#define _CRT_SECURE_NO_WARNINGS 1,或将scanf()写成scanf_s(),或者在其他地方设置(这里就不做介绍了),否则会出现报错,原因与VS的配置环境相关。cin.getline(char(变量),5(输入字符个数),’a’(终止符))//当终止符为‘\0’时可省略终止符,写为cin.getline(ch,5);getchar()是C语言的函数,C++只是兼容。

2302_80327352的博客 586

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C语言学习笔记:从语法到工程实践的核心难点与避坑指南

计算机程序设计的基础在于理解内存管理与底层原理,C语言作为系统编程的核心,其指针和内存操作是构建计算思维的关键。指针的本质是内存地址的变量,通过类型决定解释内存的方式,而动态内存管理则涉及malloc、free等函数,需警惕内存泄漏和悬空指针问题。这些概念在嵌入式系统、操作系统开发和高性能计算中具有重要价值。本文聚焦于C语言学习中的常见陷阱,如指针未初始化、字符串缓冲区溢出等,通过GDB调试和Valgrind工具的使用,帮助开发者编写更安全、健壮的代码。掌握这些核心难点,能够为后续学习数据结构、算法及系统编

weixin_30781775的博客 390

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C语言从入门到进阶

C语言从入门到进阶

qq_68719489的博客 793

Runoob.com

Runoob.com1、C++ 基本的输入输出1、标准输出流(cout)2、标准输入流(cin)3、标准日志流(clog)2、类&对象2.1 类成员函数2.2 类访问修饰符2.3 类构造函数4.3.1 举例1:不带参数的构造函数2.3.2 带参数的构造函数2.3.2.1 使用初始化列表来初始化字段2.4 析构函数2.5 拷贝构造函数2.6 友元函数2.7 内联函数2.8 this指针(每个对象都有一个特殊的指针 this,它指向对象本身。)2.9 指向类的指针2.10 类的静态成员2.10.1 用

oDuanYanGuHong的博客 1707

C语言入门:从原理到实践,掌握底层编程核心

编程语言是连接人类逻辑与计算机硬件的桥梁,其中C语言以其贴近硬件、高效灵活的特性,成为理解计算机系统工作原理的基石。从变量、函数到指针、内存管理,C语言的核心概念直接映射了计算机的底层运作机制,如内存地址、数据存储和CPU指令执行。掌握这些原理不仅能提升代码的调试和优化能力,更是学习操作系统、嵌入式开发、编译器设计等硬核技术的前提。通过构建学生管理系统等实践项目,开发者可以深入理解数据结构、文件操作等工程实践,为后续技术深造打下坚实基础。本教程将围绕指针、内存管理等核心难点,结合常见开发环境配置,提供系统的

weixin_30555515的博客 327

C11标准新特性解析:嵌入式开发中的多线程、原子操作与安全编程实践

在嵌入式系统与高性能计算领域,编程语言的内存模型与并发控制是确保系统稳定性的核心技术基础。从原理层面看,内存模型定义了多线程环境下数据访问的可见性与顺序性,而原子操作则提供了无数据竞争的共享数据访问机制,这两者共同构成了现代并发编程的理论基石。其技术价值在于,通过标准化的内存顺序语义和原子类型,开发者能够编写出既高效又可靠的多线程代码,避免因编译器优化或处理器乱序执行导致的隐蔽性错误。在应用场景上,这些特性尤其适用于实时操作系统、硬件驱动开发以及需要精细控制内存布局的嵌入式固件编写。例如,在基于STM32标

weixin_30699955的博客 389

嵌入式测试实训平台:开箱即用与即学即练的工程实践

嵌入式测试是软硬件协同验证的核心环节,其本质在于通过可控激励触发芯片外设行为,并借助示波器、逻辑分析仪等工具完成电气特性与协议合规性验证。原理上需深入理解时钟树配置、中断优先级、DMA传输机制及总线错误状态机等底层逻辑。技术价值体现在大幅降低学习门槛、提升鲁棒性验证能力、支撑AUTOSAR/ISO 11898等工业标准落地。典型应用场景覆盖蓝桥杯嵌入式竞赛实训、车载ECU功能安全测试、工业物联网固件审计及AI模型嵌入式部署验证。本文聚焦‘开箱即用’平台如何通过硬件抽象层隔离、工具链容器化与TDL脚本驱动,真

weixin_34095889的博客 364

3.数组和指针【由浅入深.c】

本文介绍数组和指针相关内容。(【由浅入深】是一个系列文章,它记录了我个人作为一个小白,在学习c++技术开发方向计相关知识过程中的笔记,欢迎各位彭于晏刘亦菲从中指出我的错误并且与我共同学习进步,作为该系列的第一部曲-c语言,大部分知识会根据本人所学和我的助手——通义,DeepSeek,腾讯元宝等以及合并网络上所找到的相关资料进行核实誊抄,每一篇文章都可能会因为一些错误在后续时间增删改查,因为该系列按照我的网络课程学习笔记形式编写,我会使用绝大多数人使用的讲解顺序编写,所以基础框架和大部分内容案例会与他人一样,

插花弄玉的博客 1133
上一篇: 简单的markdown语法
下一篇: oled1306
liam_lcj
博客等级 码龄5年 79粉丝 10原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值