杂记之C语言之指针(三)

非数组的指针--这个题目没什么含义?

在C语言中,字符串常量代表了一块包括字符串中所有字符以及一个空字符('\0')的内存地址。

char *r;

strcpy(r,s);

strcat(r,t);

//错误一:未初始化指针,不能确定r指向何处。

//解决方法:不仅要让r指向一个地址,而且r所指向的地址还应该有内存空间可供容纳的字符串,

//这个内存空间应该是以某种方式已经被分配了的。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

char r[100];

strcpy(r,s);

strcat(r,t);

//错误二:不能确保 r 的空间足够大。

//解决方法:C语言实现为我们提供了一个库函数malloc,该函数接受一个整数,然后分配能够容纳同样的数目的字符的一块内存。

//还提供了一个库函数strlen,该函数返回一个字符串中所包括的字符串中所包括的字符数。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

char *r,*malloc();

r=malloc(strlen(s)+strlen(t));

strcpy(r,s);

strcat(r,t);

//错误三:malloc函数有可能无法提供请求的内存,

//解决方法:这种情况下malloc函数会通过返回一个空指针来作为"内存分配失败"事件的信号。

//错误四:给r分配的内存在使用完之后应该及时释放

//解决方法:函数free(r);

//错误五:调用malloc函数时并未分配足够的内存。

//如果strlen(s)的值是n;那么字符串实际需要n+1个字符的空间。

char *r,*malloc();

r=malloc(strlen(s)+strlen(t))+1);

if(!r)

{

         complain();

          exit(1);

}

strcpy(r,s);

strcat(r,t);

//一段时间再使用

free(r);

//笔记摘自《C陷阱和缺陷》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值