为字符串分配空间

  以前向字符串输入内容时,经常犯一个错误:

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

但程序总是不能正常运行,后来看到《C Primer Plus》第6版第282页:如果想把一个字符串读入程序, 首先必须预留存储该字符串的空间,然后用输入函数获取该字符串。要做的第1件事是分配空间,以存储稍后读入的字符串。前面提到过,这意味着必须要为字符串分配足够的空间,不要指望计算机在读取字符串时顺便计算它的长度,然后再分配空间(计算机不会这样。除非你编写个处理这些任务的函数)。 假设编写了如下代码:

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

虽然可能会通过编译(编译器很可能给出警告),但是在读入name时,name 可能会擦写掉程序中的数据或代码,从而导致程序异常中止。因为scanf ()要把信息拷贝至参数指定的地址上,而此时该参数是个未初始化的指针,name可能会指向任何地方。最简单的方法是,在声明时显式指明数组的大小:

char name[81];

还有种方法是使用 c库函数来分配内存:

  char *name = (char *)malloc(255 * sizeof(char) );

C语言提供了许多读取字符中的函数:scanf(),gets()和fgets()。”

由于本人能力有限,所写内容可能有错误和不足,写得不好的地方请大家见谅,欢迎大家指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值