C语言基础知识点(十七)结构体中只用指针来存储字符串

// 如果需要用结构存储字符串,用字符数组作为成员会比较简单
// 如果需要使用指向char的指针来进行存储,那么需要请求malloc来
// 为字符串分配合适的存储空间

#include <stdio.h>
#include <string.h>     //提供strcpy()\strlen()的原型
#include <stdlib.h>     //提供malloc()和free()原型
#define SLEN 81
struct namect
{
    char *fname;
    char *lname;
    int letters;
};

void getinfo(struct namect *);
void makeinfo(struct namect *ptr);
void showinfo(const struct namect *ptr);
void cleanup(struct namect *ptr);
char *s_gets(char *st, int n);

int main()
{

    struct namect person;
    getinfo(&person);
    makeinfo(&person);
    showinfo(&person);
    cleanup(&person);
    return 0;
}

void makeinfo(struct namect *ptr)
{
    ptr->letters = strlen(ptr->fname) + strlen(ptr->fname);
}

void showinfo(const struct namect *ptr)
{
    printf("%s %s %d\n", ptr->fname, ptr->lname, ptr->letters);
}

void cleanup(struct namect *ptr)
{
    free(ptr->fname);
    free(ptr->lname);
}
void getinfo(struct namect *pst)
{
    char temp[SLEN];
    printf("Enter your first name: ");
    s_gets(temp, SLEN);
    pst->fname = (char *)malloc(strlen(temp) + 1);
    strcpy(pst->fname, temp);
    printf("Enter your last name: ");
    s_gets(temp, SLEN);
    pst->lname = (char *)malloc(strlen(temp) + 1);
    strcpy(pst->lname, temp);
}
char *s_gets(char *st, int n)
{
    char *ret_val;
    char *find;
    ret_val = fgets(st, n, stdin);
    if (ret_val)
    {
        find = strchr(st, '\n');
        if (find)
        {
            *find = '\0';
        }
        else
            while (getchar() != '\n')
                continue;
    }
    return ret_val;
}

通过调用 malloc 函数为 fnamelname 分配了足够的内存空间来存储用户输入的名字和姓氏,并使用 strcpy 函数将用户输入的字符串复制到这些内存空间中。

猜你喜欢

转载自blog.csdn.net/qq_51519091/article/details/136908863