基础知识 | 每日一练(103)

基础知识练习

士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ——菜根谭

学生:memcpy() 和 memmove() 有什么区别?

小林:如果源和目的参数有重叠, memmove() 提供有保证的行为。而 memcpy()则不能提供这样的保证, 因此可以实现得更加有效率。如果有疑问, 最好使用memmove()。

学生:malloc(0) 有什么用?返回一个控指针还是指向 0 字节的指针?

小林:ANSI/ISO 标准声称它可能返回任意一种; 其行为由实现定义。

学生:为什么 ANSI 标准规定了外部标示符的长度和大小写限制?

小林:问题在于连接器既不受 ANSI/ISO 标准的控制也不遵守 C 编译器开发者的规定。限制仅限于标识符开始的几个字符而不是整个标识符。在原来的 ANSI 标准中限制为 6 个字符, 但在 C99 中放宽到了 31 个字符。

学生:我的编译对最简单的测试程序报出了一大堆的语法错误。

小林:可能是个 ANSI 前的编译器, 不能接受函数原型或类似的东西。

正文完