首页 > 代码库 > C语言 动态输入字符串
C语言 动态输入字符串
作者 :卿笃军
很多时候,我们不知道要开辟多大的空间,但是我们又想实现无限制的输入~~~
这时候,就需要用到动态空间的开辟了。
先简绍2个函数: malloc() , realloc()
函数名:malloc
原型:externvoid *malloc(unsigned int num_bytes);
功能:在堆中开辟num_bytes个字节的空间
函数名:realloc
原型:externvoid*realloc(void *mem_address, unsigned intnewsize);
参数:
mem_address : 需要追加空间的首地址
newsize : 需要将空间追加到多大(是指追加后总共的大小,不是指要追加的大小)
realloc()使用注意:
- 如果有足够空间用于扩大mem_address指向的内存块,则分配额外内存,并返回mem_address。这里说的是“扩大”,我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize。那么就ok。得到的是一块连续的内存。
- 如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。(数据被移动了)。老块被放回堆上。
实例:动态输入字符串
#include <stdio.h> #include <stdlib.h> int main() { char ch,*p = (char *)malloc(sizeof(char)); //预开辟一个空间 int count = 0; while ((ch = getchar()) != ‘\n‘) { p[count] = ch; ++count; //记录需要开辟空间数 p = (char *)realloc(p,(count+1)*sizeof(char));//开辟空间(realloc返回的地址不一定是原来的地址) } //所以这里最好用p[count],而不使用++p; p[count] = ‘\0‘; //注意尾部 puts(p); free(p); p = NULL; return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。