经验分享 – C语言 | 每日基础(39)

读者:strcat 的手册页说它接受两个 char * 型参数。我怎么知道 (空 间) 分配的事情呢?

阿一:一般地说, 使用指针的时候, 你必须总是考虑内存分配, 除非明确知道编译器 替你做了此事。如果一个库函数的文档没有明确提到内存分配, 那么通常需要调 用者来考虑。Unix 型的手册页顶部的大纲段落或 ANSI C 标准有些误导作用。那里展示 的程序片段更像是实现者使用的函数定义而不是调用者使用的形式。特别地, 很 多接受指针 (如结构指针或串指针) 的函数通常在调用时都用到某个由调用者分 配的对象的指针。其它的常见例子还有 time()和 stat()。

读者:我刚才试了这样的代码 char *p; strcpy(p, “abc”); 而它运行正常?

阿一:未初始化的指针 p 所指向的随机地址恰好对你来说是 可写的, 而且很显然也没有用于什么关键的数据。

读者:一个指针变量分配多少内存?

阿一:这是个挺有误导性的问题。当你象这样声明一个指针变量的时候, char *p; 你只分配了足够容纳指针本身的内存; 也就是说, 这种情况下, 你分配了 sizeof(char*) 个字节的内存。但你还没有分配任何让指针 指向的内存。

正文完