合并字符串(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'这个结束字符,那么这些函数将不能确定字符串的结束位置在哪儿,从而引起一些不必要的错误。

posted on 2015-12-25 17:19  _阿赞  阅读(479)  评论(0编辑  收藏  举报