strncpy() & char*/char[]

· 02-01 · 92 人浏览
strncpy() & char*/char[]

这是在做笨办法学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的,本方法仍可用)

Theme Jasmine by Kent Liao