题目
合并两个字符串,每个字符串长度不小于1不超过50,
主函数已经给出,在join.h头文件中完成join函数,函数原型如下:
char* join(char* a, int alength, char* b, int blength)
需要在join函数中动态申请内存,长度为a和b长度之和加1(因为字符串结尾有‘ ’); 函数返回值即所动态申请内存的首地址。
输入:两个字符串,每个一行
输出:合并后的字符串及所申请内存的实际大小,字符串一行,实际大小一行
Sample:
input:
1234
567890
output:
1234567890
24
Hint:
使用malloc函数进行动态内存申请,申请到的实际内存大小与操作系统相关,大部分情况下不等于所申请的具体数值。
//join.h #include<stdio.h> char* join(char* a, int alength, char* b, int blength) { int i; char ch; char* c = malloc(sizeof(ch) * (alength+blength+1)); for (i = 0; i < alength; i++) c[i] = a[i]; for (i = alength; i < alength+blength+1; i++) c[i] = b[i-alength]; return c; } //main.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> #include"join.h" #define MAX 51 int main() { char a[MAX]; char b[MAX]; char* c = NULL; scanf("%s", a); scanf("%s", b); c = join(a, strlen(a), b, strlen(b)); printf("%s ", c); printf("%d ", malloc_usable_size(c)); free(c); return 0; }
笔记:
1、google style出了两次问题,一个是强制类型转换,c = (char*)...不能通过;还有一个新的强制转换类型,没有使用过,另一个就是sizeof()里面必须是变量名,不要加类型;
2、malloc分配的内存为alength+blength+1;若输出为字符串数组则不用加' ',若为字符,只需令c[alength+blength+1] = ' '
3、strlen得到的值不包括' '
4、有关标准答案的memcpy函数总结
#ifndef __JOINS__ #define __JOINS__ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> char* join(char* a, int alength, char* b, int blength) { char* c = malloc(sizeof(a[0]) * (alength + blength + 1)); memcpy(c, a, sizeof(a[0]) * alength); memcpy(c + alength, b, sizeof(b[0]) * blength); c[alength + blength] = '