1.先看第一个函数体如何实现,没什么好说的了,直接show you the codes
#define _CRT_SECURE_NO_WARNINGS
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
int GetString(const char *str1/*in*/, char *str2/*in*/);
int GetString_Adv(const char *str1/*in*/, char **str2/*out*/);
int GetString_Adv_Free1(char *str2);
int GetString_Adv_Free2(char **str2);
int GetString(const char *str1/*in*/, char *str2/*in*/)
{
char *p1 = NULL, *p2 = NULL;
int len = 0,i =0;
if (str1 == NULL || str2 == NULL)
{
return -1;
}
len = strlen(str1);
if (len <1)
{
return -1;
}
strcpy(str2, str1);
p1 = str2 + 1;
p2 = str2;
for (i = 0; i < len; i++)
{
if (isalpha(*p1) && isspace(*p2))
{
*p1 -= 32;
}
p1++;
p2++;
}
return 0;
}
int GetString_Adv(const char *str1/*in*/, char **str2/*out*/)
{
char *p1 = NULL, *p2 = NULL;
int len = 0, i = 0;
char *tmp = NULL;
if (str1 == NULL || str2 == NULL)
{
return -1;
}
len = strlen(str1);
tmp = (char *)malloc((len + 1)*sizeof(char));
if (tmp == NULL)
{
return -2;
}
if (len <1)
{
return -1;
}
strcpy(tmp, str1);
//准备循环环境
p1 = tmp + 1;
p2 = tmp;
for (i = 0; i < len; i++)
{
if (isalpha(*p1) && isspace(*p2))
{
*p1 -= 32;
}
p1++;
p2++;
}
//赋值
*str2 = tmp;
return 0;
}
int GetString_Adv_Free1(char *str2)
{
if (str2 != NULL)
{
free(str2);
}
}
int GetString_Adv_Free2(char **str2)
{
char *tmp = NULL;
tmp = *str2;
if (str2 = NULL)
{
return 0;
}
if (tmp != NULL)
{
free(tmp);
}
}
void main()
{
int ret = 0;
char *p1 = " i am student, you are teacher ";
char str1[1024*10] = { 0 };
ret = GetString(p1, str1);
if (ret != 0)
{
return;
}
printf("%s", str1);
int ret1 = 0;
char *p2 = " i am student, you are teacher ";
char *str2 = NULL;
ret1 = GetString_Adv(p2, &str2);
printf("%s", str2);
GetString_Adv_Free2(&str2);
//放在GetString_Adv_Free2里面进行*str2= NULL会出错,为什么呢?
str2 = NULL;
system("pause");
}
2.参考Day6的内容吧。。。。。。。
3.
4.