C和指针之动态内存分配之编程练习3

来源:互联网 发布:数据库union和join 编辑:程序博客网 时间:2024/05/18 14:24

1、问题

编写一个函数,从标准输入读取一个字符串,把字符串复制到动态内存分配的内存中,并返回该字符串的拷贝,这个函数不应该对读入字符串的长度作任何限制!







2、代码实现

#include <stdio.h>#include <stdlib.h>#define OFFSET 5char *my_strcpy(){     char *buffer = NULL;     //缓冲区的长度     int buffer_len = 0;     //屏幕字符总长度     int all_len = 0;     char *p = buffer;     int ch;     while ((ch = getchar()) != '\n' && ch != EOF)     {         if (all_len >= buffer_len)         {             //再次申请的长度             buffer_len += OFFSET;             //扩充内存空间             buffer = realloc(buffer, buffer_len);             //指向刚申请内存空间的空闲地方             p = buffer + all_len;         }         all_len++;         *p++ = ch;     }     *p = '\0';     return buffer;}int main(){    char *result = my_strcpy();    printf("result is %s\n", result);    if (result)        free(result);    return 0;}






3、运行结果

1111deMacBook-Pro:malloc a1111$ vim my_cpystr.c1111deMacBook-Pro:malloc a1111$ gcc -g my_cpystr.c -o my_cpystr1111deMacBook-Pro:malloc a1111$ ./my_cpystrchenyuresult is chenyu



阅读全文
0 0
原创粉丝点击