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

本文主要是介绍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';}elsewhile (getchar() != '\n')continue;}return ret_val;
}

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

这篇关于C语言基础知识点(十七)结构体中只用指针来存储字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/833693

相关文章

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou