这是在做笨办法学C 中文版 | 《笨办法学C 中文版》时,ex17碰到的问题
同时附上gdb pdf:gdb cheatsheet
char *s2 = "str2";
char s2[] = "str2";
发现,使用char *
声明的变量被放在内存里,并且权限是r--
,而char []
声明的变量被放在栈上,权限是rw-
使用gdb调试,让我发现了很多有意思的的事情。
What is segmentation fault?
这是我大一学C语言时就经常碰到的一个问题,当时只在网络上随便搜了一下,发现经常是由于数组越界导致的,经过这学期的微机原理学习后我知道了段的概念,同时经过这个例子我明白了,错误的段访问(此例为写一个只读的段)会导致Segmentation Fault
Way of how computer works is "simple"(?)
在跟踪strncpy()工作的流程时,我发现他的工作方式其实很原始和暴力(brute force),他列举了所有操作数的大小的可能,并且写好对应的寄存器/内存处理方法,并逐一比较(使用2分的方法),找到对应的长度后(什么是"对应的长度"?比如对于长度为 $ (2n - 1, 2n), n \in \natnums $ 他们的处理方法为同一种 e.g本例待处理的字符串长度为3,则他的处理方式是将前两个字符赋值给ecx,后两个字符赋值给edx,然后再把cx,dx赋值给目标字符串,显然对于长度为4的,本方法仍可用)