【 C 】动态内存分配实用案例(二)之复制字符串

举报
李锐博恩 发表于 2021/07/15 06:10:30 2021/07/15
【摘要】 用动态分配内存制作一个字符串的一份拷贝。注意:调用程序应该负责检查这块内存是否分配成功,这样做允许程序以任何它所希望的方式对错误作出反应。   #nclude <stdlib.h>#include <string.h>char * strdup( char const *string ){ char *new_string; //请求足...

用动态分配内存制作一个字符串的一份拷贝。注意:调用程序应该负责检查这块内存是否分配成功,这样做允许程序以任何它所希望的方式对错误作出反应。

 


  
  1. #nclude <stdlib.h>
  2. #include <string.h>
  3. char * strdup( char const *string )
  4. {
  5. char *new_string;
  6. //请求足够长度的内存,用于存储字符串和它的结尾NUL字节
  7. new_string = malloc( strlen( string ) + 1 );
  8. //如果我们得到内存,就复制字符串
  9. if( new_string != NULL )
  10. strcpy( new_string, string );
  11. return new_string;
  12. }

输入被读入缓冲区,每次读取一行。此时可以确定字符串的长度,然后就分配内存用于存储字符串。最后,字符串被复制到新内存。这样缓冲区又可以用于读取下一个输入行。

上面的程序返回一个输入字符串的拷贝该拷贝存储于一块动态分配的内存中。函数首先试图获得足够的内存来存储这个拷贝。内存的容量比字符串的长度多一个字节,以便存储字符串结尾的NUL字节。如果内存分配成功,字符串就被复制到这块新内存。最后,函数就返回一个指向这块内存的指针。注意,如果由于某些原因导致内存分配失败,new_string的值将为NULL。在这种情况下,函数将返回一个NULL指针。

什么时候内存会分配失败呢?

对于malloc动态内存分配函数来说,如果内存池是空的,或者它的可用内存无法满足你的要求时,会发生什么情况呢?

在这种情况下,malloc函数向操作系统请求,要求得到更多的内存,并在这块内存上执行分配任务。如果操作系统无法向malloc函数提供更多的内存,malloc就返回一个NULL指针。因此,对每个从malloc返回的指针都应该进行检查,确保它并非NULL是非常重要的。

最后,对上述函数做出一个总结,该函数就是对输入的字符串检查它的长度,然后动态分配内存,内存的大小是字符串长度多一个字节,用于存储字符串结尾的NUL字节,之后,判断动态内存分配是否成功,如果成功,则执行复制字符串操作,对函数接收的字符串复制到一块新的内存中去。函数返回一个指向该内存的指针。如果内存分配失败,则函数返回一个NULL指针。

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/82631558

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。