Pabebe's Blog

业精于勤,荒于嬉;行成于思,毁于随。


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

strcpy()函数被弃用的原因以及扩展

发表于 2021-08-24 | 分类于 Programming
字数统计: 762 字 | 阅读时长 ≈ 3 分钟

bug

VS2015环境下,显示strcpy()函数出错的解决办法: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 即使前面加了头函数文件cstring 也无济于事。

原因:vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替.如果继续使用strcpy的,那么只需要在函数体前面加上#pragma warning(disable:4996)就可以了。

strcpy_s(dest, bufsize, src);
bufsize为dest缓冲区最大长度。它与 strcpy 的不同在于,在它取得额外参数来决定目的缓冲区大小时,会因为发生溢位而出现错误,如此一来,就可以预防缓冲区溢位。

PS: 缓冲区溢位攻击

当前存入的数据量大于缓冲区的容量,可能导致栈帧指向原本的函数返回地址被覆盖,黑客利用一点,篡改进程运行时栈(比如指向shell脚本),从而改变程序的正常流向。

阅读全文 »

位运算

发表于 2021-07-25 | 分类于 C++
字数统计: 746 字 | 阅读时长 ≈ 3 分钟

位运算

剑指 Offer 65. 不用加减乘除做加法

参考:https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/solution/mian-shi-ti-65-bu-yong-jia-jian-cheng-chu-zuo-ji-7/

用到位运算,分解成两步:

(1)无进位:异或 (a^b)

(2)进位 :与+左移1位 (a&b<<1)

累加,直至不进位。

C++\JAVA【Python有所不同】

若数字 aaa 和 bbb 中有负数,则变成了减法,如何处理?
A : 在计算机系统中,数值一律用 补码 来表示和存储。补码的优势: 加法、减法可以统一处理(CPU只有加法器)。因此,以上方法 同时适用于正数和负数的加法 。

阅读全文 »

为什么很多题目都对1e9+7(即1000000007)取模?

发表于 2021-05-13
字数统计: 342 字 | 阅读时长 ≈ 1 分钟

剑指 Offer 10- II. 青蛙跳台阶问题

做该题时,发现有大数会进行取模运算,有点好奇原因。

因运算的不断累积,导致结果超过了 int32 甚至 int64 的取值范围。

当一个问题只对答案的正确性有要求,而不在乎答案的数值,可能会需要将取值很大的数通过求余变小(保证其数值在int类型范围内)。

阅读全文 »

引用到底占不占内存空间?

发表于 2021-04-30 | 分类于 C++
字数统计: 609 字 | 阅读时长 ≈ 2 分钟

“声明”和“定义”的区别

首先理解:“声明”和“定义”的区别

在我以往的课本中,没有明确说明声明和定义的作用。

在《C++Primer》中

声明:向编译器“介绍”变量(标识符),告诉编译器该变量的类型与名字。

定义:向变量分配存储空间,也可进行初始化。在程序中,变量有且只有一个定义

声明包括:

  • 定义(因在定义时就已经声明了变量的类型与名字)
  • extern关键字,以标示变量或者函数的定义在别的文件中
  • 函数的声明和定义区别比较简单,带有{ }的就是定义,否则就是声明。
阅读全文 »

i++ 不能作为左值,而++i能 的原因

发表于 2021-04-24 | 分类于 C++
字数统计: 457 字 | 阅读时长 ≈ 1 分钟

int 类型的++i与i++的实现, 注意i++的返回是 const int类型,由于oldValue是一个编译器自动分配的临时变量,并不是程序中定义的变量,返回的是一个数据值,而非地址,所以不能对它进行寻址(不能通过地址对它进行操作).第二,常量不能作为左值使用。

阅读全文 »

for(auto &i:s)和for(auto i:s)的区别

发表于 2021-04-19 | 分类于 C++
字数统计: 1.2k 字 | 阅读时长 ≈ 5 分钟
for(auto i:s)相当于拷贝,不改变s的值,详情请点击~
阅读全文 »

常函数的运用

发表于 2021-04-17 | 分类于 C++
字数统计: 783 字 | 阅读时长 ≈ 3 分钟

统计一段词中出现次数最多的高频词(不区分大小写)

思路:用map存储每个词出现的频率(注意为什么不用unordered_map,因为若想实现“不区分大小写”的功能,就必须添加一个自定义比较器,unordered_map不支持这一选项),然后用priority_queue优先级队列的小顶堆特性找到高频词(TOPK问题转换为TOP1)。

(小顶堆求最大TOPK)堆(size = k)里存放的是当前元素的频率,其中堆顶的元素最小。加入新进来的元素,此时若size>k,弹出堆顶元素,调整堆。【大顶堆求最小TOPK类似】

在写自定义比较器的过程中出现bug

错误 C3848 具有类型“const my_less”的表达式会丢失一些 const-volatile 限定符以调用“bool my_less::operator ()(const std::string &,const std::string &)”

阅读全文 »

线性表、顺序表、广义表(其表头表尾)

发表于 2021-04-16 | 分类于 Programming
字数统计: 850 字 | 阅读时长 ≈ 3 分钟
注意广义表的特殊性
阅读全文 »

为什么拷贝构造函数参数必须为引用?

发表于 2021-04-09 | 分类于 C++
字数统计: 506 字 | 阅读时长 ≈ 1 分钟

今天朋友问我一个特别有意思的点,eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Person{
private:
int m_age;
int *m_height;
public:
//构造函数
Person(int a, int h) {
m_age = p.m_age;
//堆区
m_height = new int(h);
}
//拷贝构造函数
Person(const Person& p) {
cout << "拷贝构造函数!" << endl;
//如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来的重复释放堆区问题
m_age = p.m_age;
//m_height = p.m_heigh (浅拷贝,系统默认拷贝构造函数)  //m_height 是指针
m_height = new int(*p.m_height);
}

};

int main(){
Person p1(1,2);
Person p2(p1);
}

无论是系统默认还是自定义的拷贝构造函数,都是传一个引用,而不是值,这是为什么呢?

阅读全文 »

打怪之旅-C++基础

发表于 2021-03-01 | 分类于 Programming
字数统计: 12.6k 字 | 阅读时长 ≈ 48 分钟
过一遍语法知识
阅读全文 »
123…10
Pabebe

Pabebe

I have the soulful eyes of a cow

92 日志
20 分类
12 标签
RSS
GitHub CSDN E-Mail
Links
  • Title
© 2022 Pabebe | 本站总字数: 219.7k | 总访问量 次 | 有人到访
0%