C++错题集(持续更新ing)

Day 1

一、选择题

解析:

在数字不会溢出的前提下,对于正数和负数,有:

1)左移n位,相当于操作数乘以2的n次方;

2)右移n位,相当于操作数除以2的n次方。

解析:

int (*p[10])(int*) 

(*p[10]):p是一个数组,这个数组的元素是指针;

这些指针指向的是一个函数;

这个函数的参数是 int *,返回值是int。

因此,p是 元素指向函数的指针 的数组 即 元素为函数指针 的数组。

一般我用来分辨这种 就看(*p),p(),p[]这三类——指针,函数,数组。一般来说()和[]优先级先级相同,比*高。

这题先和[]结合,故为数组,然后再分析各自内容

解析:

STL中一级容器是指, 容器元素本身是基本类型, 非组合类型。

set, multiset中元素类型是pair<key_type, key_type>;

map, multimap中元素类型是pair<key_type, value_type>;

STL中的常用容器包括:顺序性容器(vector、deque、list)、关联容器(map、set)、容器适配器(queue、stac)。
 

二、编程题

1.计算某天是星期几

输入一个年月日,计算出这个日期对应的是星期几

代码:

#include<iostream>
using namespace std;

int main() {
    char weekname[][10] = {
        "Monday",
        "Tuseday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
    };
    int year;
    int month;
    int day;

    cin >> year;

    cin >> month;

    cin >> day;

    if (month == 1 || month == 2) {
        month += 12;
        year--;
    }
    int w;
    w = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 +
         year / 400) % 7;
    cout << weekname[w] << endl;
}

Day 2

一、选择题

class XA {

private: int x;

public: XA(int n) {x=n;}

} ;

class XB :public XA

{

private: int y;

    public: XB(int a,int b);

};

这句代码是XB类的构造函数的初始化列表部分。它用于初始化XB类的成员变量,并调用基类XA的构造函数。

这里,XB::XB(int a ,int b)XB类的构造函数的声明,它接受两个整数参数ab

后面的:XA(a),y(b)是初始化列表。它用于初始化类的成员变量和调用基类的构造函数。

  1. XA(a): 这部分调用了基类XA的构造函数,并将参数a传递给它。这是为了确保在XB的构造函数体执行之前,基类XA的部分已经被正确地初始化。
  2. y(b): 这部分初始化了XB类自己的成员变量y,使用参数b作为初始值。

初始化列表是一个高效且推荐的方式来初始化类的成员变量,因为它可以避免额外的赋值操作,并且对于某些类型(如引用和常量成员)是必需的。

重复多次fclose一个打开过一次的FILE *fp指针会导致未定义行为。

在C语言中,fclose函数用于关闭文件流,释放与之关联的资源。当你调用fclose时,会将文件缓冲区的内容写入到磁盘中,并清空缓冲区。如果你试图再次关闭已经关闭的文件流,那么就会发生未定义行为,因为文件流已经被关闭并且资源已经被释放,再次调用fclose函数就会导致错误的结果。

16进制字母部分不分大小写的

两个考点:

1.构造函数的调用顺序是:基类》对象》派生类,析构顺序相反;

2.构造函数里初始化列表初始化顺序由成员变量的声明顺序决定。

二、编程题 

#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()

{

    int nums;

    cin>>nums;

    int* num = new int[nums];

    for (int i = 0; i < nums; ++i)

        cin>>num[i];


    sort(num, num + nums);

    int i = 0;

    for (; i < nums; ++i)

    {

        if (num[i] != i)

            break;

    }

    cout << (i) << endl;
    
    return 0;

}
// 64 位输出请用 printf("%lld")

Day 3

一、选择题

int printf ( const char * format, ... );返回值:  正确返回输出的字符总数,错误返回负值,

与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。

 在行尾放一个 \ ,编译器会忽略行尾的换行符,起到续行的作用。

 

逗号表达式优先级最低,从左到右执行,如果逗号左边改变了某些变量的值,右边使用改变后的变量值,整个表达式最终的值为逗号右边的值,-a对a的值没有发生改变,所以a=6,自增自减的优先级高与关系运算符,所以b>a--返回false,c>d返回false,?:组合为如果?前面的表达式为真,则返回?后面的值,为假返回:后面的值,最后返回a>b为false,0。
 

 

1.这里为指针,那么str存储的是该字符串的地址,所以sizeof(str)则为该字符串的首地址,

如果是64位,地址为8字节(Byte),如果是32位,地址为4字节(Byte)。

2.而strlen(str)就是统计字符串长度,那么就是6。

在什么情况下系统会调用拷贝构造函数:(三种情况)

(1)用类的一个对象去初始化另一个对象时

(2)当函数的形参是类的对象时(也就是值传递时),如果是引用传递则不会调用

(3)当函数的返回值是类的对象或引用时

二、编程题

#include <iostream>
#include<bits/stdc++.h>
using namespace std;

//#include<algorithm>  reverse

//2x+1 奇数 n = 2x+1 x = (n - 1)/2
//2x+2 偶数 n = 2x+2 x = (n - 2)/2

int main() {

    int n;
    cin>>n;
    string s="";
    while(n)
    {
        if(n%2==1)//奇数
        {
            s+='2';
            n = (n-1)/2;
        }
        else//偶数
        {
            s+='3';
            n = (n -2)/2;
        }
    }
    reverse(s.begin(),s.end());
    cout<<s<<endl;
}

Day 4

一、选择题

1.内联函数的函数体内不能含有复杂的结构控制语句,如switch和while,否则编译器将该函数视同普通函数那样产生函数调用代码。

2.递归函数不能被用来作为内联函数。

3.内联函数一般适合于只有1-5行语句的小函数,对于一个含有很多语句的大函数,没必要使用内联函数来实现。

4.内联函数的定义必须出现在内联函数第一次被调用之前。

5.对内联函数不能进行异常接口声明,就是不能声明可能抛出的异常。

1. 内联函数是通过inline关键字来定义的,它的作用是把函数的代码直接嵌入到调用该函数的地方,而不是通过函数的调用来执行代码。
2. 内联函数的主要优势是可以减少函数调用的开销,从而提高程序的执行效率。但是如果函数体过于庞大,内联可能会导致代码膨胀,增加程序的体积,从而反而降低程序的效率。
3. 内联函数的调用方式和普通函数一样,不同的是编译器不会生成函数调用代码,而是直接拷贝内联函数的代码到调用处。
4. 内联函数适用于一些代码量较小,频繁调用的函数,比如一些简单的getter和setter函数。
5. 在编写内联函数时需要注意,它只是建议编译器将函数呈现为内联形式,而不是强制要求编译器这么做。如果编译器认为内联函数不适合内联,它就会按照普通函数来处理

 #define            定义一个预处理宏
#undef            取消宏的定义
#if                   编译预处理中的条件命令,相当于C语法中的if语句
#ifdef              判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef            与#ifdef相反,判断某个宏是否未被定义
#elif                若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if(扩展条件)
#else              与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else(扩展条件)
#endif             #if, #ifdef, #ifndef这些条件命令的结束标志.
defined          与#if, #elif配合使用,判断某个宏是否被定义 

二、编程题 

Day 5

一、选择题

A new和delete的释放方法不同.

B 子类重新定义父类虚函数的行为叫做 重写(覆盖)

C C++语言函数可以递归调用但是不能嵌套定义.

D 正确, 在C++语言调用函数中,只能把实参的值传给形参,形参的值不能传给实参.(不考虑引用,指针等情况)

 

官方解析:正确答案:B
A 选项 static_cast 用于良性转换,一般不会导致意外发生,风险很低。
B 选项 dynamic_cast 借助 RTTI,用于类型安全的向下转型(Downcasting)。
C 选项 const_cast 用于 const 与非 const、volatile 与非 volatile 之间的转换。
D 选项 reinterpret_cast 高度危险的转换,这种转换仅仅是对二进制位的重新解释,不会借助已有的转换规则对数据进行调整,但是可以实现最灵活的 C++ 类型转换。 

A:友元函数并不需要通过对象或指针调用,它可以像普通函数一样直接调用。

B:友元函数是独立于类继承机制的,和类是否被继承没有关系。因此,友元函数可以被子类或父类继承。

C:友元函数确实没有 this 指针,因为它不属于类的成员函数,也没有被绑定到任何一个类的对象上。

D:这个说法是错误的。虽然友元函数能够访问类的私有成员,但并没有破坏类的继承性机制。类的派生类仍然可以继承这些私有成员,只是无法在自己的成员函数中访问而已。

二、编程题

#include <iostream>
using namespace std;

int main() {
     int n;
     cin>>n;
     int *num = new int[n];
     int f = 0;
     int sum = 0;
     for(int i = 0;i<n;i++)
     {
        cin>>num[i];
        sum += num[i];
        if(num[i] < 0)
        {
            f++;
            sum = 0;
        }

     }
        if(f == n)
        {
            cout<<num[n-1];
        }
        else 
        {
           cout<<sum<<endl;
        }
           return 0;
}
// 64 位输出请用 printf("%lld")

标准答案: (连续最大和)

#include<iostream>
using namespace std;
int main(){
    int n,*a;
    while(cin>>n){
        a = new int[n];
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        int sum=a[0],max=a[0];
        for(int i=1;i<n;i++){
            sum = sum>0? (sum+a[i]): a[i];
            if(sum>max){
                max = sum;
            }
        }
        cout<<max<<endl;
    }
    return 0;
}

#include<iostream>
using namespace std;
#include<string>

int main()
{
	string a = "11";
	//cin >> a;
	string b = "10";
	//cin >> b;
	string res;
	int i = a.size() - 1;
	int j = b.size() - 1;
	int carry = 0;
	while (i >= 0 || j >= 0 || carry != 0)
	{
		int digitA = i >= 0 ? a[i] - '0' : 0;
		int digitB = j >= 0 ? b[i] - '0' : 0;
		int sum = digitA + digitB + carry;
		carry = sum >= 2 ? 1 : 0;
		sum = sum >= 2 ? sum - 2 : sum;
		res += to_string(sum);
		i--;
		j--;
	}
	reverse(res.begin(), res.end());
	cout << res << endl;
	/*
	* 1.字符转整数
	* 2.遍历两个字符串,完成进位操作
	* 3.整数转换字符串函数to_string
	*/
	return 0;
}

Day 6 

一、选择题

不应该说类的大小,具体讲应该是类对象(实例)的大小有关因素:普通成员变量,虚函数、继承;无关因素为:静态成员变量、静态成员函数及普通成员函数。

1、为类的非静态成员数据的类型大小之和.

2.由编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针). 
3.为了优化存取效率,进行的边缘调整(字节对齐). 
4 与类中的构造函数,析构函数以及其他的成员函数无关
 

在C++中,每个对象都必须具有非零的大小。即使类A没有显式定义任何成员变量,编译器也会为其分配一个字节的大小,以确保每个对象在内存中都有一个唯一的地址。这个额外的字节被称为“占位符”字节或“填充”字节

print("*")函数调用的返回值是字符串中字符个数,不包含结束标识符`\0’,相当于strlen,即返回值为1,恒成立;而‘0’的asc 码是48,不等于0,也是恒成立,所以选择B  

 

struct 的成员默认是公有的

class 的成员默认是私有的

class继承默认是私有继承

struct 的继承默认是公有的

二、编程题

#include<iostream>
using namespace std;
#include<vector>
#include<unordered_map>
class Solution {
public:
    int garbageCollection(vector<string>& garbage, vector<int>& travel) 
    {
        int res = 0;//总时间(包括收集时间和移动时间)
        int cur_dis = 0;//车辆当前位置距离起点的移动时间
        unordered_map<char, int>distance;//存储每种垃圾类型累计的移动时间
        for (int i = 0;i<garbage.size(); i++)
        {
            res += garbage[i].size();
            if (i > 0)//取移动时间,房子序号跟移动时间数组的序号差1
            {
                cur_dis += travel[i - 1];//加上当前房子的垃圾收集时间
                                         //只有i大于0才累加移动时间
            }
            for (auto c : garbage[i])//遍历当前房子的垃圾类型
            {
                distance[c] = cur_dis;//更新移动时间
            }
        }
        for (auto& [k, v] : distance)
        {
            cout << k << " " << v << endl;
            res += v;//计算时间
        }
        return res;
    }
};

int main()
{
    vector<string> garbage = { "G","P","GP","GG" };
    vector<int> travel = { 2,4,3 };
    Solution s;
    int time = s.garbageCollection(garbage,travel);
    cout << time << endl;
    return 0;
}

Day 7 

一、选择题

数组做函数参数,会退化成指针 故4,4 

二、编程题

#include<iostream>
using namespace std;
#include<unordered_map>
#include<math.h>
class Sultion
{
	unordered_map<int, int>memo;
public:
	int minDay(int n)
	{
		if (n <= 1)
		{
			return 1;
		}
		if(memo.contains(n))
		{
			return memo[n];
		}
		return memo[n] = min((minDay(n / 2) + n % 2), (minDay(n / 3) + n % 3)) + 1;
	}
};

int main()
{
	int n;
	cin >> n;
	Sultion s;
	int minDay =s.minDay(n);
	cout << minDay << endl;
	return 0;
}


大神题解icon-default.png?t=N7T8https://leetcode.cn/problems/minimum-number-of-days-to-eat-n-oranges/solutions/2773476/liang-chong-fang-fa-ji-yi-hua-sou-suo-zu-18jv/

Day  8

一、选择题

double的范围要比float的范围大,float要比int的范围大

类型转换分两种:

  1. 自动类型转换(隐式)
    • 特点: 代码不需要进行特殊处理,自动完成
    • 规则: 数据范围从小到大
    • 安全性:安全
  2. 强制类型转换
    • 特点:代码需要进行特殊的格式处理,不能自动完成
    • 格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据
    • 数据损失,比如3.14(double)转成int,会丢失小数部分
    • 安全性:不安全

 

C语言中以数字1-9开头表示十进制,以0开头表示八进制,以0X开头表示十六进制 

 Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2){}

//解释4次的原因:

       首先这个方法是Line的构造函数,它有2个参数,类型为Point,(注意:不是引用(Point&),也不是指针(Point*))

       其次,冒号后面的叫构造函数的初始化列表,用于初始化成员变量,注意是初始化 知道这两点之后,那么再来说原因:

       c++这门语言不像java,如果参数不写成引用(Point&)或者指针(Point*),那么在传递参数的时候会建立一个对象的副本。

       Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2){},

传入xp1时,会去创建一个Point的对象,调用1次Point的拷贝构造,这是第1次,同理xp2,再进行p1(xp1)时,这叫初始化p1,不是定义之后再赋值!这又会调用1次Point的拷贝构造,同理p2(xp2),因此共4次 一般来说这个方法最好这么写Line::Line(const Point& xp1,const Point& xp2):p1(xp1),p2(xp2){},这样就只会调2次了

 第一种AI生成解法

class Solution {
public:
    int minimumRounds(vector<int>& tasks) {
        std::unordered_map<int, int> counts;
        for (int task : tasks) {
            ++counts[task];
        }

        int totalRounds = 0;
        for (const auto& count : counts) {
            if (count.second == 1) {
                return -1; // 如果有任务数量为1,则无法完成
            } else if (count.second % 3 == 0) {
                totalRounds += count.second / 3;
            } else {
                totalRounds += (count.second / 3) + 1;
            }
        }

        return totalRounds;
    }
};

第二种大神的解法

https://leetcode.cn/problems/minimum-rounds-to-complete-all-tasks/solutions/1427626/ha-xi-biao-tan-xin-by-endlesscheng-tgtf/ 

class Solution {
public:
    int minimumRounds(vector<int>& tasks) {
        unordered_map<int, int> cnt;
        for (int t : tasks) {
            cnt[t]++;
        }
        int ans = 0;
        for (auto& [_, c] : cnt) {
            if (c == 1) {
                return -1;
            }
            ans += (c + 2) / 3;
        }
        return ans;
    }
};

 持续更新ing!

  分享完毕,关注我,带你了解更多的编程知识。

看到这里,不妨点个攒,关注一下吧!

最后,谢谢你的观看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/630129.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于51单片机的自动浇花器电路

一、系统概述 自动浇水灌溉系统设计方案&#xff0c;以AT89C51单片机为控制核心&#xff0c;采用模块化的设计方法。 组成部分为&#xff1a;5V供电模块、土壤湿度传感器模块、ADC0832模数转换模块、水泵控制模块、按键输入模块、LCD显示模块和声光报警模块&#xff0c;结构如…

51单片机超声波测距_液位检测_温度检测原理图PCB仿真代码

目录 实物图&#xff1a; PCB ​原理图​ 仿真图 ​编辑 程序 资料下载地址&#xff1a;51单片机超声波测距-液位检测-温度检测原理图PCB仿真代码 主控为stc89c52,通过ds18b20进行温度采集&#xff0c;超声波测距&#xff0c;距离不可以超过1m&#xff0c;通过按键可以设…

做简单易用的GIS资源管理软件

在室外资源管理领域&#xff0c;采用基于GIS的解决方案已成为主流趋势&#xff0c;旨在实现资源的高效利用和管理。GIS技术结合资源对象的规划、定位和监控&#xff0c;为企业提供全面的管理方案&#xff0c;从而优化资源使用、提高运营效率和降低成本。 然而&#xff0c;许多资…

shell脚本实现linux系统自动化配置免密互信

目录 背景脚本功能脚本内容及使用方法 1.背景 进行linux自动化运维时需要先配置免密&#xff0c;但某些特定场景下&#xff0c;做了互信的节点需要取消免密&#xff0c;若集群庞大节点数量多时&#xff0c;节点两两之间做互信操作非常麻烦&#xff0c;比如有五个节点&#x…

计网面试干货---带你梳理常考的面试题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、HTTP和HTTPS的区别 1.安全性&#xff1a;HTTPS通过SSL/TLS协议对数据进行加密处理&#xff0c;有效防止数据在传输过…

人工智能项目,如何解决大模型的数据私有化

这个问题是最近走访百家企业&#xff0c;客户问的最多的问题。人工智能是对数据集中后&#xff0c;再利用的智能化手段&#xff0c;ChatGPT还在持续的投入&#xff0c;汇集数据、训练模型&#xff0c;微软也不过是做了一个办公客户端的智能工具&#xff0c;那么行业应运之时&am…

写后端项目时上传文件接口使用阿里云oss-规范写法

文章目录 开通对象存储服务密钥管理点击头像点击密钥管理创建新密钥AccessKey 写在yml配置文件中相关配置1.pom依赖2.全局配置类3.AliOssUtil 工具类3.AliOssProperties类&#xff0c;用于读取yml文件中写入的密钥4.controller层&#xff0c;用于写传输文件的接口 开通对象存储…

《Python编程从入门到实践》day29

# 昨日知识点回顾 修改折线图文字和线条粗细 矫正图形 使用内置格式 # 今日知识点学习 15.2.4 使用scatter()绘制散点图并设置样式 import matplotlib.pyplot as plt import matplotlib matplotlib.use(TkAgg)plt.style.use(seaborn-v0_8) # 使用内置格式 fig, ax plt.subpl…

荣耀MagicBook X 14 Pro锐龙版 2023 集显(FRI-H76)笔记本电脑原装出厂Windows11系统工厂模式安装包下载,带F10智能还原

恢复开箱状态预装OEM系统&#xff0c;适用型号&#xff1a;HONOR荣耀FRI-H76、FRI-H56 链接&#xff1a;https://pan.baidu.com/s/1Lcg45byotu5kDDSBs3FStA?pwdl30r 提取码&#xff1a;l30r 华为荣耀原装WIN11系统工厂安装包&#xff0c;含F10一键恢复功能、系统自带所有驱…

蓝桥杯-外卖店优先级(简单写法)

“饱了么”外卖系统中维护着 N 家外卖店&#xff0c;编号 1∼N。 每家外卖店都有一个优先级&#xff0c;初始时 (0 时刻) 优先级都为 0。 每经过 1 个时间单位&#xff0c;如果外卖店没有订单&#xff0c;则优先级会减少 1&#xff0c;最低减到 0&#xff1b;而如果外卖店有订…

四、基于Stage模型的应用架构设计

前面我们了解了如何构建鸿蒙应用以及开发了第一个页面&#xff0c;这只是简单的demo&#xff1b;那么如何去设计&#xff0c;从0到1搭建一个真正的应用呢 一、基本概念 1、Stage模型基本概念 Stage模型概念图 AbilityStage&#xff1a;是一个Module级别的组件容器&#xff0…

「AIGC」Python实现tokens算法

本文主要介绍通过python实现tokens统计,避免重复调用openai等官方api,开源节流。 一、设计思路 初始化tokenizer使用tokenizer将文本转换为tokens计算token的数量二、业务场景 2.1 首次加载依赖 2.2 执行业务逻辑 三、核心代码 from transformers import AutoTokenizer imp…

基于网络爬虫技术的网络新闻分析(二)

目录 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3 系统概要设计 3.1 设计约束 3.1.1 需求约束 3.1.2 设计策略 3.1.3 技术实现 3.3 模块结构 3.3.1 模块结构图 3.3.2 系统层次图 3.3.3…

与禹老师学前端vue3学习汇总

24.5.15&#xff1a; 创建Vue3工程 1.确定自己电脑有没有nodejs环境&#xff0c;在cmd中输入node&#xff0c;如果出现Node.js的版本号说明已经有这个环境了&#xff0c;否则搜索Node.js安装 2.先在D盘创建一个文件夹Vue3_Study&#xff0c;然后在这个空文件夹中右键选择终端…

汇聚荣:拼多多长期没有流量如何提高?

在电商的海洋中&#xff0c;拼多多以其独特的团购模式吸引了众多消费者的目光。然而&#xff0c;随着市场竞争的加剧和消费者需求的多样化&#xff0c;一些商家发现自家店铺的流量持续低迷&#xff0c;销售业绩难以突破。面对这样的挑战&#xff0c;如何有效提升拼多多店铺的客…

Linux进程控制——Linux进程程序替换

前言&#xff1a;Linux进程控制包含了进程终止&#xff0c;进程等待&#xff0c;进程程序替换。走到现在我们也只剩下进程程序替换没介绍了&#xff0c;那么让我们来看看进程程序替换到底是什么&#xff01; 本篇主要内容&#xff1a; 替换原理 替换函数 实现简易shell 我们所创…

不用投稿邮箱,怎样向各大新闻媒体投稿?

身为单位的信息宣传员,我深知肩上责任重大。每个月,完成单位在媒体上投稿发表文章的考核任务,就如同一场无声的赛跑,既要保证速度,更要注重质量。起初,我遵循“前辈们”的老路,一头扎进了邮箱投稿的海洋。但很快,现实给了我一记重拳——邮箱投稿的竞争犹如千军万马过独木桥,稿件…

C++ 中的 lambda 表达式

1.概念 lambda表达式实际上是一个匿名类的成员函数&#xff0c;该类由编译器为lambda创建&#xff0c;该函数被隐式地定义为内联。因此&#xff0c;调用lambda表达式相当于直接调用匿名类的operator()函数&#xff0c;这个函数可以被编译器内联优化&#xff08;建议&#xff0…

20240511每日运维----聊聊nignx改配置所有的nginx改完unknow

1、改配置所有的nginx改完unknow src/core/nginx.h src/http/ngx_http_header_filter_module.c src/http/ngx_http_special_response.c src/http/v2/ngx_http_v2_filter_module.c 2、make 3、去objs里面把nginx文件替换过去sbin/nginx

Android系统不同版本存储权限

一、Android存储简介 Android系统分为内部存储和外部存储 从Android6.0开始不断在更新存储&#xff08;读写&#xff09;权限&#xff0c;除了在AndroidManifest.xml文件里声明&#xff0c;app运行时也要动态申请使用对应的权限 提醒&#xff1a;应用私有存储不需要动态申请权…