新手编程训练项目-002——C语言文本合并02:不定长字符串输入函数

日期:2017年8月26日

来源:001项目中文本文件地址输入,减少内存浪费

思路:循环交换两列动态生成的字符串,并在每次交换后加长并释放上次申请的内存

注意:

1.若使用函数strlen()作为申请内存大小时,字符串结尾必须有’\0’,这是strlen()函数算法决定的。申请的内存大小也可使用计数变量。

2.字符串函数strcpy()的使用,两参数的位置。

3.申请内存时要判断是否申请成功。

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
char* get_name(void)											//不定长输入地址
{
char *name, *temp;
char ch;
int j = 1;

name = (char*)malloc(sizeof(char)*(j + 1));
if (NULL == name)
{
exit(1);
}

while ((name[j - 1] = getchar()) != '\n')
{
j++;
temp = (char*)malloc(j + 1);
if (NULL == temp)
{
exit(1);
}
name[j - 1] = '\0';
strcpy(temp, name);
free(name);

name = (char*)malloc(sizeof(char)*(j + 1));
if (NULL == name)
{
exit(1);
}
strcpy(name, temp);
free(temp);
}

name[j - 1] = '\0';

return(name);
}