1. /*-----------------------------------
  2. names3.c -- 使用指针和 malloc()
  3. -----------------------------------*/
  4.  
  5. #include <stdio.h>
  6. #include <string.h> //提供 strcpy()、strlen() 原型
  7. #include <stdlib.h> //提供 malloc()、free() 原型
  8.  
  9. #define SLEN 81
  10.  
  11. struct namect
  12. {
  13. char *fname; //fname、lname 分别保存内存分配的地址
  14. char *lname;
  15. int letters;
  16. };
  17.  
  18. void getinfo(struct namect *); //分配内存
  19. void makeinfo(struct namect *);
  20. void showinfo(const struct namect *);
  21. void cleanup(struct namect *);
  22. char* s_gets(char *st, int n);
  23.  
  24. int main()
  25. {
  26. struct namect person;
  27.  
  28. getinfo(&person);
  29. makeinfo(&person);
  30. showinfo(&person);
  31. cleanup(&person);
  32.  
  33. return ;
  34. }
  35.  
  36. void getinfo(struct namect *pst)
  37. {
  38. char temp[SLEN];
  39.  
  40. printf("Please enter your first name.\n");
  41.  
  42. s_gets(temp, SLEN);
  43. pst->fname = (char*)malloc((strlen(temp) + ) * sizeof(char));
  44. strcpy(pst->fname, temp);
  45.  
  46. printf("Please enter your last name.\n");
  47.  
  48. s_gets(temp, SLEN);
  49. pst->lname = (char*)malloc((strlen(temp) + ) * sizeof(char));
  50. strcpy(pst->lname, temp);
  51. }
  52.  
  53. void makeinfo(struct namect *pst)
  54. {
  55. pst->letters = strlen(pst->fname) + strlen(pst->lname);
  56. }
  57.  
  58. void showinfo(const struct namect *pst)
  59. {
  60. printf("%s %s, your name contains %d letters.\n"
  61. , pst->fname, pst->lname, pst->letters);
  62. }
  63.  
  64. void cleanup(struct namect *pst)
  65. {
  66. free(pst->fname);
  67. free(pst->lname);
  68. }
  69.  
  70. char* s_gets(char *st, int n)
  71. {
  72. char *ret_val;
  73. char *find;
  74.  
  75. if (ret_val = fgets(st, n, stdin))
  76. {
  77. if (find = strchr(st, '\n'))
  78. *find = '\0';
  79. else
  80. while (getchar() != '\n') continue;
  81. }
  82.  
  83. return ret_val;
  84. }

names3.c

第 14 章 结构和其他数据形式(names3)的更多相关文章

  1. 第 14 章 结构和其他数据形式(伸缩型数组成员C99)

    伸缩型数组成员C99 声明一个伸缩型数组成员的规则: 1.伸缩型数组成员必须是结构的最后一个成员: 2.结构中必须至少有一个成员: 3.伸缩数组的方括号是空的. 示例 struct flex { in ...

  2. 第 14 章 结构和其他数据形式(names)

    *--------------------------------- names1.c -- 使用指向结构的指针 ---------------------------------*/ #includ ...

  3. 第 14 章 结构和其他数据形式(enum枚举)

    /*----------------------------- enum.c -- 使用枚举类型的值 -----------------------------*/ #include <stdi ...

  4. 【机器学习实战】第14章 利用SVD简化数据

    第14章 利用SVD简化数据 SVD 概述 奇异值分解(SVD, Singular Value Decomposition): 提取信息的一种方法,可以把 SVD 看成是从噪声数据中抽取相关特征.从生 ...

  5. MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分

    第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我 ...

  6. 《how to design programs》14章 再论自引用数据

    这是一个家族谱: ;child(define-struct child (father mother name date eyes)) #lang racket ;child (define-stru ...

  7. C Primer Plus之结构和其他数据形式

    声明和初始化结构指针 声明结构化指针,例如: struct guy * him; 初始化结构指针(如果barney是一个guy类型的结构),例如: him = &barney; 注意:和数组不 ...

  8. C Primer Plus学习笔记(十三)- 结构和其他数据形式

    建立结构声明 结构声明(structure declaration)描述了一个结构的组织布局 struct book { char title[MAXTITL]; char author[MAXAUT ...

  9. 《机器学习实战》学习笔记——第14章 利用SVD简化数据

    一. SVD 1. 基本概念: (1)定义:提取信息的方法:奇异值分解Singular Value Decomposition(SVD) (2)优点:简化数据, 去除噪声,提高算法的结果 (3)缺点: ...

随机推荐

  1. Spring读取配置文件 @Value

    最近在学习Spring如何读取配置文件,记录下方便自己也方便别人: 大致分为两类吧,一种的思路是利用Spring的beanFactoryPostProcessor读取配置文件内容到内存中,也就是应用程 ...

  2. 小程序实例:用js方法splict()、indexOf()、push()、replace()等操作数组Array的增删改查

    一.增加数组子级 1.Array.push() 定义和用法 向数组的末尾处添加一个或多个子集,并返回新数组的长度 语法 var array=["好","扎在那个" ...

  3. Windows服务设置

    [服务列表]services.msc [注册服务] 描述:在注册表和服务数据库中创建服务项. 用法:sc <server> create [service name] [binPath= ...

  4. Iframe 父页面自动获取子页面的高度

    <iframe id="mainweb" name="mainweb" src="http://www.baidu.com/" bor ...

  5. WCF、WebAPI、WCFREST、WebService之间的区别总结(实用)

    在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Services.我分享一下我对 ...

  6. redis-java基础操作

    安装 windows版的Redis,打开即可,默认端口6379 导入两个jar包  commons-pool2-2.3.jar   jedis-2.7.0.jar 一 写配置文件 redis.setM ...

  7. 在微信小程序中引入 Iconfont 阿里巴巴图标库

    小程序的代码包不能超过4M,为了压缩代码包的大小,可以通过第三方链接引入图标资源 Iconfont 无疑是最常用的第三方图标库,这里介绍一下在微信小程序引入 Iconfont 的方法 一.下载图标 首 ...

  8. MySQL的事务的处理

    步骤: 1.开启事务 start transaction 当我们开启一个事务的时候,我们对sql的操作都发生在内存中,但是没有真正的反馈到数据库磁盘的文件中! 2.回滚 rollback 回滚,就是恢 ...

  9. js-ES6学习笔记-let命令

    1.let命令 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. for循环的计数器,就很合适使用let命令. 下面的代码如果使用var ...

  10. JS中undefined和null的区别,以及出现原因

    区别:null是一个表示无的对象,转换为数值为0: undefined表示一个无的原始值,转化为数值为NAN(与任何数字相加也为NAN) undefined出现原因:(口诀:一变量二函数一对象) 1. ...