// 如果需要用结构存储字符串,用字符数组作为成员会比较简单
// 如果需要使用指向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
函数为 fname
和 lname
分配了足够的内存空间来存储用户输入的名字和姓氏,并使用 strcpy
函数将用户输入的字符串复制到这些内存空间中。