1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
// 结构体可以赋值、也可以初始化为另一个结构体 // 结构体中字符串定义的区别 #include <stdio.h> struct test { char t1[31]; int t2; }; int main(int argc, char const *argv[]) { struct test test1 = { "zhangsan", 13 }; struct test test2 = test1; /* 字符串存储在结构体内部 struct names { char fname[LEN]; char lname[LEN]; }; 结构体内部只存放了2个字符串地址(只适用于在另外的地方已经为字符串分配了内存空间,例如:常量、数组中的字符串) struct names { char * fname; char * lname; }; */ return 0; } // 结构体内部存放字符串指针实例 #include <stdio.h> #include <string.h> //strcpy() strlen() #include <stdlib.h> //malloc() free() struct namect { char * fname; char * lname; int letters; }; void getinfo(struct namect *); void makeinfo(struct namect *); void showinfo(const struct namect *); void cleanup(struct namect *); int main(int argc, char const *argv[]) { struct namect person; getinfo(&person); makeinfo(&person); showinfo(&person); cleanup(&person); return 0; } void getinfo(struct namect * pst) { char temp[81]; puts("Enter the fname"); gets(temp); // 用来分配存放fname的内存 pst->fname = (char *)malloc(strlen(temp) + 1); // 把fname复制到已分配的内存中 strcpy(pst->fname, temp); puts("Enter the lname"); gets(temp); pst->lname = (char *)malloc(strlen(temp) + 1); strcpy(pst->lname, temp); } void makeinfo(struct namect * pst) { pst->letters = strlen(pst->fname) + strlen(pst->lname); } void showinfo(const struct namect * pst) { printf("%s %s your name contains %d letters\n", pst->fname, pst->lname, pst->letters); } void cleanup(struct namect * pst) { free(pst->fname); free(pst->lname); } |