GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         看到了一些关于字符串的操作,顺带在看一个接下来会接触到的函数strcat。

1647_MIT 6.828 strcat函数的简单总结_unix

1. 这个也是一个库函数,在字符串这个库里面。

2. 看到这两个函数的时候,我满脑子想到的其实是lisp。看起来,我的C语言使用的确是不够广泛通用。

3. 这个函数有一个弊端,那就是如果dest的空间不够大的话,可能会导致一些我只行为。

4. 这里给出来了一种strncat的实现方式,这里可以看出来结束的条件有两种,要么是拷贝完字符串要么是拷贝了足够多的字符数目。

1647_MIT 6.828 strcat函数的简单总结_x86_02

1. 这两个函数最终的返回值都是修改后的字符串的指针。

2. 从这里列出来的标准来看,这个函数满足的标准非常多。UNIX,从现在接触到的信息看在系统中把一切看做文件,而文件中容纳的信息很多时候都是字符串。这个,从处理的信息角度来说的确是跟我现在常用的嵌入式是很不相同的。

3. 这里给出来了一个BSD中的一些系统扩展的一个函数,解决了前面的缓冲区溢出问题。但是,这样的处理会有数据丢失。函数的返回值不再是修改后的字符串而是一个字符串的字符数目,通过这个数目可以判断是否出现了数据丢失。

4. 在拼接的过程中需要判断dest的结束位置,这个过程会花费一定的时间,而且是跟字符串的长度有关的。

1647_MIT 6.828 strcat函数的简单总结_服务器_03

1. 这里的这个测试代码,通过增加了一个时间监控信息能够让人感觉出来随着字符串的变长,拼接的速度是有变化的。

1647_MIT 6.828 strcat函数的简单总结_MIT_04

         这里是我进行了重新排版后的代码,也按照我熟悉的规范度进行了一点修改。这里用到的格式化输出有个%j,对应的其实是intmax_t的数据类型。而time,是一个获取时间秒的函数。如果传入的参数NULL,那么返回具体数值,否则按照传入的指针更新指针指向的的存储信息。

1647_MIT 6.828 strcat函数的简单总结_服务器_05

         这个是运行的效果,这里没有录制视频,不然是能够很明显体验到行切换的速度在逐渐变慢的过程。