合并字符串(for hw)//详解malloc
eg : int* p;
p = (int *) malloc (sizeof(int));
或者 int a;
char* c = malloc(sizeof(a) * len);
合并两个字符串,每个字符串长度不小于1不超过50,
主函数已经给出,在join.h头文件中完成join函数,函数原型如下:
char* join(char* a, int alength, char* b, int blength)
需要在join函数中动态申请内存,长度为a和b长度之和加1(因为字符串结尾有‘\0’,数组最后一个元素加上“\0",表示字符串结束,这是一种字符串的表达方式); 函数返回值即所动态申请内存的首地址。
输入:两个字符串,每个一行
输出:合并后的字符串及所申请内存的实际大小,字符串一行,实际大小一行
Sample:
input:
1234
567890
output:
1234567890
24
使用malloc函数进行动态内存申请,申请到的实际内存大小与操作系统相关,大部分情况下不等于所申请的具体数值。
已给出的主函数
1.#include<stdio.h> 2.#include<stdlib.h> 3.#include<string.h> 4.#include<malloc.h> 5.#include"join.h" 6.#define MAX 51 7.int main() { 8. char a[MAX]; 9. char b[MAX]; 10. char* c = NULL; 11. scanf("%s", a); 12. scanf("%s", b); 13. c = join(a, strlen(a), b, strlen(b)); 14. printf("%s\n", c); 15. printf("%d\n", malloc_usable_size(c)); 16. free(c); 17. return 0; 18.}
标答:::::
1.#ifndef __JOINS__ 2.#define __JOINS__ 3.#include<stdio.h> 4.#include<stdlib.h> 5.#include<string.h> 6.#include<malloc.h> 7.char* join(char* a, int alength, char* b, int blength) { 8. char* c = malloc(sizeof(a[0]) * (alength + blength + 1));//malloc 9. memcpy(c, a, sizeof(a[0]) * alength); 10. memcpy(c + alength, b, sizeof(b[0]) * blength);//学习memcpy 11. c[alength + blength] = '\0'; 12. return c; 13.} 14.#endif
①memcpy表示将a中的字符串复制到c中,长度为第三个数值
②malloc http://blog.csdn.net/xw13106209/article/details/4962479
③\0'一般放在字符串的结束处,表示字符串的结束,其是ascii值为0的字符的转义。
在头文件#include <string.h>中包含的一些字符串处理函数等中,一般处理字符串时,都是一'\0'作为字符串的结束,如果一个字符串中没有'\0'这个结束字符,那么这些函数将不能确定字符串的结束位置在哪儿,从而引起一些不必要的错误。