2020-04-19

①电脑开机界面红屏怎么办
我来答china7258知道合伙人数码行家 2017-11-27聊聊朋友,你好,开机出现红屏,一般造成这样的原因有二个:第一个原因:这一般是主机和显示器的连接视频线,没有接触充分造成的,你只要将这根连接视频线重新拨插一下,一般就解决了显示器偏色的问题。第二个原因:就是显卡本身的问题,可能就是显卡接触不良或者性能下降造成,出现缺色,一般出现缺色是因为,和VGA相连的三基色并联的一个75欧姆的电阻出现问题,才会出缺色现象,所以建义修理显卡,也就是更换这个75欧姆的电阻就OK了,(注意:在做这个以前,你也将这个显卡在关机的情况下,拨出来,用橡皮擦对准显卡的金手指(也就是有铜片的地方)来回的擦上几下,把灰搞掉,然后按原样插回,这是因为有时候显卡和插槽接触不良也会引起的缺色,如果这样做了还是缺色,哪就用上面的方法处理)希望我的回答对你有所帮助,祝你成功,快乐~~
②鼠标旁边小圆圈不断一直闪烁的原原因:
这是你开启了搜狗输入法或者其他”设置“进程链接网络原因造成的;
处理办法很简单,这时→重启一下或者联网就可解决此问题。

C字符串操作strcat/strcat_s详解 原创
2019-05-27
3点赞

每天学一点!

码龄3年

关注
前言
strcat、strcpy、strcmp、strlen是C中针对字符串的库函数,这四个函数不安全,然后C针对这个情况整出strcat_s、strcpy_s、strncmp、strnlen_s(这个并不是替代stelen的)来弥补。而在C++中一般用string。

这篇文章主要讲:strcat以及如何避免不安全的方法。

1 strcat
1.1 函数功能
把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’

1.2 函数声明、参数及返回值
头文件:

#include<string.h> © 、 #include

声明:

char *strcat(char *dest, const char *src)

参数:

dest – 指向目标字符串,该数组包含了一个 C 字符串,且足够容纳追加后的字符串
src – 指向要追加的字符串,该字符串不会覆盖目标的字符串

返回值:指向dest的指针

1.3 注意
(1)src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。最重要的是,strcat函数不检查这些。

(2)strcat返回值有什么作用? 链式传递:strcat(a, strcat(b, c));

1.4 strcat代码演示
#include “stdafx.h”
#include
#include

int main(){
char str1[100] = “Hello,”;
char str2[] = “world”;
strcat(str1, str2);
std::cout << "str1 is " << str1 << "str2 is " << str2 << std::endl;
return 0;
}
显示结果:

错误 1 error C4996: ‘strcat’: This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

正如前言里说的,微软已经知道strcat等函数不安全了,直接不让你通过了,而解决措施也告诉我们了。但是这里为了先看看strcat,所以先不用strcat_s。

如何忽略这个警告/错误,措施有以下几种:

(1)第一种:_CRT_SECURE_NO_WARNINGS

VS中:项目 - 属性 - 配置 - C/C++ - 预处理器 - 预处理器定义里添加:_CRT_SECURE_NO_WARNINGS

(2)第二种: 加个预处理命令:#pragma warning(disable:4996)

这里注意:#pragma warning(disable:4996)要放在#include "stdafx.h"后面!(具体可以百度stdafx的用法)

#include “stdafx.h”
#include
#include

#pragma warning(disable:4996)

int main(){
char str1[100] = “Hello,”;
char str2[] = “world”;
strcat(str1, str2);
std::cout << "str1 is " << str1 << std::endl << "str2 is " << str2 << std::endl;
return 0;
}

结果显示:
str1 is Hello,world
str2 is world
请按任意键继续. . .
PS:这里如果要用strcat,我还是倾向于第二种方法,因为第一种方法久而久之我们自己给忘了,而第二种方法从程序里就能显而易见,从而提醒自己这是个不安全的函数。

前面也说,strcat函数有两个条件,dest的空间要能容纳src,且两者内存不能重叠。

下面分别看下不满足上述两个条件,会发生什么。

(1)dest空间不足

#include “stdafx.h”
#include
#include

#pragma warning(disable:4996)

int main(){
char str1[] = “Hello,”;
char str2[] = “world”;
strcat(str1, str2);
std::cout << "str1 is " << str1 << std::endl << "str2 is " << str2 << std::endl;
return 0;
}

从结果可以看出:当dest空间不足时,编译是可以通过的,但是在运行时出错。

(2)dest和src内存重叠

#include “stdafx.h”
#include
#include

#pragma warning(disable:4996)

int main(){
char str1[100] = “Hello,”;
char *str2 = str1 + 2;
strcat(str1, str2);
std::cout << "str1 is " << str1 << std::endl << "str2 is " << str2 << std::endl;
return 0;
}
结果:可以编译,但是无输出。

strcat小结:

不安全函数,全靠编程者自己注意。这种函数平常练习为了方便用用,真正写代码的时候还是不要用这种函数,东西多了脑子可能就忽视了。

1.5 针对strcat解决措施
(1)用strcat_s函数

1 函数声明:(引用MSDN)

errno_t strcat_s(char *strDestination, size_t numberOfElements, const char *strSource);

2 参数及返回值

参数:

strDestination – 目标字符串缓冲区
numberOfElements – 源字符串追加到目标字符串缓冲区后的总大小,单位字节

       strSource -- 源字符串缓冲区 

返回值:

0:成功

EINVAL:目标字符串或者源字符串没有初始化

ERANGE:越界

3 注意

strcat_s函数从上面可以看出,做了两个检查,字符串有没有初始化和越界。并没有针对内存重叠做出检查。

第一个参数:合并字符串后的大小。即 源字符串大小 + 目标字符串的大小 + '\0’的大小 ,也就是

numberOfElements = strlen(strDestination) + strlen(strSource) + 1;

4 代码演示

#include “stdafx.h”
#include
#include

int main(){
_CrtSetReportMode(_CRT_ERROR, 0);
char str1[] = “Hello,”;
char str2[] = “world”;
int num = strlen(str1) + strlen(str2) + 1;
errno_t rlt = strcat_s(str1, num, str2);
if (rlt == 0)
std::cout << "str1 is " << str1 << std::endl << "str2 is " << str2 << std::endl;
if (rlt == EINVAL)
std::cout << “no initialize” << std::endl;
if (rlt == ERANGE)
std::cout << “Dest’s size is small!” << std::endl;
return 0;
}
但是结果并不是:Dest’s size is small!

调试的时候,发现rlt=0,而MSDN上著名返回值为0即成功。

这个地方我是真的百思不得其解啊!哪位大佬看到了这篇博客,有想法请一定告诉我! 谢谢!

(2)用C++的string函数

#include “stdafx.h”
#include
#include

int main(){
char str1[] = “Hello,”;
char str2[] = “world”;
std::string rlt = str1 + std::string("") + str2;
std::cout << rlt << std::endl;
return 0;
}

输出结果:
Hello,world
请按任意键继续. . .
用C++中的string类简单粗暴。

但是要注意以下几点

(1)当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string。参考<<C++ Primer>>第5版,P81

(2)string 怎么转 char* ?

char str = const_cast<char>(rlt.c_str());

strcat_s 和 strcat 的区别
vs独特的特性,stract_s,strcpy_s,是VS2005及以后新增的具有更强"安全性"的CRT函数,取代了以前不带s的函数。以strcat为例,前后的比较:strcat:两个参数,第二个参数的字符串追加到后面可能会导致溢出。strcat_s:可以三个参数,strcat_s(s1,10,s2);也可以两个参数。…
APP打开
字符串函数—strcat()与strncat详解及实现
一、strcat()与strncat() strcat():strcat(dest,src); strcat把src所指向的字符添加到dest结尾处(覆盖原dest结尾处的’\0’),并添加新的’\0’。 说明:src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。 str…
APP打开
C++安全函数之strcat_s
C++安全函数之strcat_s1.必须包含的头文件:2.函数申明:errno_t strcat_s( char *strDestination, size_t numberOfElements, const char *strSource );3.参数介绍strDestinationNull 终止的目标字符串缓冲区。numberOfEl
APP打开
strcat、strcpy、strcmp三种函数用法

  1. strcat函数其一般形式为:strcat(字符数组1,字符数组2)strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。例如:char str1[30]={″People′s Republic of ″};char str2[]={″China″};printf(″…
    APP打开
    C字符串操作strlen/strnlen_s详解_路漫漫其修远兮-CSDN…_CSDN博客
    strcat、strcpy、strcmp、strlen是C中针对字符串的库函数,这四个函数不安全,然后C针对这个情况整出strcat_s、strcpy_s、strncmp、strnlen_s(这个并不是替代stelen的…
    strcat_s详解_a3125504x的博客-CSDN博客
    strcat_s是为了解决字符串拼接溢出在VS2005之后引进的更具安全性的函数。 strcat_s本身保留了两个变量strcat的特性,即可以使用两个参数的函数原型。如stract_s(str…
    strcat()函数的用法
    这几天的一次程序练习中用到了strcat()函数,但也想到了一些问题。 我们都知道strcat(str,ptr)是将字符串ptr内容连接到字符串str后,然后得到一个组合后的字符串str,比如str字符串内容为"123456\0",ptr字符串为"abc\0",那么strcat(str,ptr)后str内容为"123456abc\0",输出结果为1234…
    APP打开
    自己实现strcat
    用自己的函数实现string类中的strcat函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值