当前位置:嗨网首页>书籍在线阅读

06-分配空间

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.2.1 分配空间

要做的第1件事是分配空间,以存储稍后读入的字符串。前面提到过,这意味着必须要为字符串分配足够的空间。不要指望计算机在读取字符串时顺便计算它的长度,然后再分配空间(计算机不会这样做,除非你编写一个处理这些任务的函数)。假设编写了如下代码:

char *name;
scanf("%s", name);

虽然可能会通过编译(编译器很可能给出警告),但是在读入 name 时, name 可能会擦写掉程序中的数据或代码,从而导致程序异常中止。因为 scanf() 要把信息拷贝至参数指定的地址上,而此时该参数是个未初始化的指针, name 可能会指向任何地方。大多数程序员都认为出现这种情况很搞笑,但仅限于评价别人的程序时。

最简单的方法是,在声明时显式指明数组的大小:

char name[81];

现在 name 是一个已分配块(81字节)的地址。还有一种方法是使用C库函数来分配内存,第12章将详细介绍。

为字符串分配内存后,便可读入字符串。C库提供了许多读取字符串的函数: scanf()gets()fgets() 。我们先讨论最常用 gets() 函数。