Blog

ヾ(≧O≦)〃ao~ welcome to my website

0%

F12从定义和调用之间跳转

可以自己制作头文件, 在‘resource files’中, 后缀为.h, 在Source file中调用需要#incude "header_file_name"

黄色箭头可以用鼠标左键来改变位置.

只有拥有源代码生成的进程才可以调试.

gitlab 克隆仓库前的操作

https://blog.csdn.net/Alvin_Lam/article/details/90513353

通过SSH克隆远程仓库(GitLab)到本地

由于不是任何用户都能从远程仓库克隆到本地的,也是需要鉴别的,因此本地需要用git bash 创建一个公钥,而远程仓库也要把这个公钥保存下来,进而本地才可以从远程download。主要步骤如下:

1.首先需要下载一个git for windows,成功安装。

2.在github或者gitlab上有自己的账户。

3.打开git bash.exe 输入ssh-keygen -t rsa -C “your_email@example.com“ 使用你的邮箱用ssh-keygen命令创建密码对。注意ssh-keygen命令中间没有空格,如果在ssh后面加上空格,会得到Bad escape character ‘ygen’.的错误。

4.在目录C:\Users\your_name.ssh 目录下找到生成的公钥文件id_rsa.pub,记事本打开,将里面的内容复制到剪贴板。

5.打开新建的github或者gitlab账户,找到SSH Keys选项如图:


将剪贴板内容粘贴到内容框中,title可以用默认的邮箱名字,最后点击add。这就代表这个用户被远程仓库所承认了,接下来就可以克隆仓库了。

6.可以先选择一个空文件夹用来储存克隆下来的项目,然后鼠标右键选择git bash here,然后输入命令 git clone + 自己Git库的地址,如图

Receiving objects :100% Resolving deltas:100% 代表远程仓库项目已经下载到本地。

创建SSH的目的:

创建SSH KEY(这个作用是来识别你的电脑,相当于人的身份证号),在你的c盘用户目录下面(我的目录–C:\Users\LX)看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:$ ssh-keygen -t rsa -C “youremail@example.com“,
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

CPU- The Central Processing Unit

计算机的心脏是“中央处理单元”, 简称“CPU”.

CPU用来运行程序, 程序由一个个操作组成, 这些操作叫做“指令”(instruction). 指令指示计算机所做的行为. 例如算数运算指令, CPU会让ALU进行算数运算, 又例如内存指令, CPU会和内存通信, 然后读写值.

CPU组件

从高层次视角, CPU组件之间组合的方式叫做“微体系架构”, 简称“架构”, 如AMD今年10月份发布的zen3架构锐龙5000桌面处理器. 其实不只CPU, 芯片都有架构, 大家9月份听到更多的架构肯定源自于NVIDIA(英伟达)的30系显卡的安培架构等. 架构如此重要, 以至于先进的架构早已经成为了衡量芯片的一项重要指标.

Chapter 6 存储器层次结构

1. cache存储块的抖动问题

中文版本 P431 6. 直接映射高速缓存总的冲突不命中

虽然书上的实例针对的是直接映射高速缓存的抖动问题, 但这些也同样适用于组相联映射高速缓存.

2. 编写对高速缓存友好的代码

中文书P440 6.5

C 语言: 用EOF代替回车作为终止输入的符号

EOF 知识链接:

What is EOF in the C programming language?

用EOF终止输入需要保证EOF在回车后输入, 否则EOF不会被识别到

1
2
3
4
5
// 用EOF终止字符的输入
if ( (str = getchar()) != EOF ) // 继续输入
{
/*语句*/
}else /*终止语句*/

题目:

http://oj.kfcoding.com/contest/24/problem/6-1

答案:

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
27
28
29
30
31
32
#include <stdio.h>
#include <string.h>

void StringCount(char s[])
{
int English_char = 0, Space_and_Enter = 0,
num_char = 0, other_char = 0;

for (int i = 0; i < 100; i++)
{
if ((s[i] = getchar()) != EOF)
{
if ((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z'))
English_char++;
else if (s[i] >= '0' && s[i] <= '9')
num_char++;
else if (s[i] == ' ' || s[i] == '\n')
Space_and_Enter++;
}else break;
}
printf("%d %d %d %d", English_char, Space_and_Enter, num_char
, strlen(s) - English_char - Space_and_Enter - num_char - 1);
}

int main()
{
char str[100];

StringCount(str);

return 0;
}

C语言: 消除输出的最后一位空格

1
printf("%c",8);

上面这里是输出ASCII码为8的字符,这是一个Backspace控制符。于是可以往回消去一个字符。

PS: 经过验证, 该方法有效, 但是在学校的oj平台上无用, 且会被判定为未知字符.

Git & Github

How to clone all remote branches in Git?

VSCODE: 输出中文乱码解决方法

https://www.w3xue.com/exp/article/20203/80007.html

https://zhuanlan.zhihu.com/p/30127242)

C语言: strrev() function

strrev() function

It is used to reverse the given string expression.

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>

int main()
{
char s1[50];

printf("Enter your string: ");
gets(s1);
printf("\nYour reverse string is: %s",strrev(s1));
return(0);
}
1
2
3
// output
Enter your string: studytonight
Your reverse string is: thginotyduts

C语言: scanf输出输出一行包括空格的字符串

String Input and Output

Input function scanf() can be used with %s format specifier to read a string input from the terminal. But there is one problem with scanf() function, it terminates its input on the first white space it encounters. Therefore if you try to read an input string “Hello World” using scanf() function, it will only read Hello and terminate after encountering white spaces.

However, C supports a format specification known as the edit set conversion code %[..] that can be used to read a line containing a variety of characters, including white spaces.

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
#include<string.h>

void main()
{
char str[20];
printf("Enter a string");
scanf("%[^\n]", &str); //scanning the whole string, including the white spaces
printf("%s", str);
}

C语言: 动态分配数组(一维)

数组元素个数为变量

1
2
3
4
5
6
7
8
int *a = NULL;								// 声明数组头指针	
int N = 0; // 声明变量并初始化
scanf("%d", &N); // 变量赋值
a = (int *) malloc(N * sizeof(int)); // 动态分配内存
/*
之后a的用法与a[N]无异
*/
free(a); //!!!i使用结束后必须释放内存空间

C语言: 动态分配数组(二维)

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
27
#include <stdio.h>
#include <stdlib.h>

int main()
{
int nrows, ncolumns;
int i = 0;

scanf("%d %d", nrows, ncolumns);

// 为数组分配行数 注意分配的是整形指针的数量 每行元素是个整形指针
int **array = malloc(nrows * sizeof(*array));

// 对每行分配数组的个数(二维数组列数)
for(i = 0; i < nrows; i++)
{
// 为每行申请内存空间
array[i] = (int *)malloc(ncolumns * sizeof(int));
}

/*接下来等于对 a[nrows][ncolumns] 进行操作
*/

free(array); // 一定要在最后讲内存空间释放!!

return 0;
}

C语言: Problem with scanf() when there is fgets()/gets()/scanf() after it

article_links

C语言: fgets函数的一些注意事项

1
char *fgets(char *str, int n, FILE *stream);
  1. fets函数中的第二个参数为字符串的允许输入个数, 实际上这个个数是要算上字符串的结尾‘\0’, 除去‘\0’, 有效输入字符为 n-1个.

  2. 当fgets函数以换行符号作为最后的终止符, 如果当前输入的字符个数小于n-1, 那么换行符\n也会作为输入字符记载到字符串中.

3.7.1 过程调用

过程对应于c 语言中就是指的函数。函数相当于是对一系列工作流程所进行的一个抽象, 那么函数调用在高级语言中是一个再常见不过的事情。

在这一部分主要讨论一下函数调用,也就是对应到汇编语言中的过程在机器级是如何实现的. 如下有两段代码

一个是P 函数,一个是Q 函数。我们可以看到在P 这个函数中, 调用了Q 这样的一个函数, 实现了一个函数的嵌套调用。在这样的一个嵌套调用中。计算机, 底层主要完成了哪些工作呢?

阅读全文 »

显示隐藏文件夹

1
ls -a

如.git

Vim 粘贴会因为编辑器内置的‘智障’缩进从而形成乱码

Visual Studio

vs设置语言

在Visual Studio中,点击“工具”–>”选项”–>”环境”–>”区域设置”–>”语言”[1]

visual studio 调试

按F9设置断点, F5从断点处开始执行语句, F10从断点处一步一步执行代码.

阅读全文 »

3.7.5(1) 栈上的局部存储

语言特性角度的过程存储管理问题

接下来我们讨论一下过程中的存储管理问题。首先我们先从语言特性的角度上去分析这个问题。

阅读全文 »