C实现string字符串

在C中实现string字符串,使用typedef将string定义为char *。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef char* string;

string get_string(string);

int main(void)
{
    string name = get_string("What's your name?\n");
    printf("Hello, %s!\n", name);
    printf("strlen: %d\n", strlen(name));

    return 0;
}

string get_string(string msg)
{
    int len = 8;
    string str = (string)malloc(sizeof(char)*len);  // 动态分配一个长度为len的字符串指针
    char *ptr = str;  // 将ptr指针指向str
    char ch;
    int i = 0;

    printf("%s", msg);
    while ((ch = getchar()) != '\n')  // 循环接收字节,直到用户输入回车
    {
        *ptr++ = ch;  // 将ch赋值给*ptr并且ptr指向下一个地址
        i++;
        if (i == len)  // 如果长度已满
        {
            string tmp = str;  // tmp指向str
            len *= 2;  // 长度翻倍
            str = (string)malloc(sizeof(char)*len);  // str重新指向一个动态分配长度翻倍的字符串指针
            strcpy(str, tmp);  // 将tmp中的字符都复制给str    
            ptr = str + i;  // ptr现在指向新的str中的第i个字符地址
            free(tmp);  // 释放内存空间 
            tmp = NULL;
        }
    }
    *ptr = '\0';  // 字符串指针最后一个字符必须为'\0'

    return str;
}
posted @ 2019-12-17 14:43  no樂on  阅读(719)  评论(0编辑  收藏  举报