A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qinyawan 初级黑马   /  2015-11-24 12:59  /  783 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//有一字符串,其中包含数字,提取其中的数字,要求动态分配内存保存
        //提示:先计算出有几个数字,然后根据数字个数来开辟空间
//    char string[] = "dfdsfsf2f4gf5hy7g5fd3ds4";
//    int i = 0, count = 0;
//    while (*(string + i) != '\0') {
//        if (*(string + i) <= '9' && *(string + i) >= '0') {
//            count++;
//        }
//        i++;
//    }
//    char *p = malloc(sizeof(char) * (count + 1));
//
//    int k = 0, j = 0;
//    while (*(string + k) != '\0') {
//        if (*(string + k) >= '0' && *(string + k) <= '9') {
//            *(p + j) = *(string + k);
//            j++;
//        }
//        k++;
//    }
//        //添加结束符\0
//    *(p + j) = '\0';
//    printf("%s\n", p);
//    free(p);
//    p = NULL;

        //输入3个单词,动态分配内存保存单词,并在最后输出
        //提示:定义一个指针数组保存数据 char * word[3] = {0};


//    char * words[3] = {0};
//    char temp[100] = {0};
//    for (int i = 0; i < 3; i++) {
//        scanf("%s", temp);
//        unsigned long length = strlen(temp) + 1;
//        words[i] = malloc(sizeof(char) * length);
//        strcpy(words[i], temp);
//    }
//    for (int i = 0; i < 3; i++) {
//        free(words[i]);
//        words[i] = NULL;
//    }

//    void * calloc(n, size);
//    分配n个size大小的内存空间;
//    n和size是无符号整型;
//    calloc和malloc的区别:calloc会把内存中的数据清零,效率低

//    int *p = calloc(5, 4);
//    free(p);
//    p = NULL;


//    void *realloc(p, size)
//    给定一个地址,从这个地址开始,分配size个字节的内存
//    p是指针,size是无符号整型
//    realloc会先从地址p开始往下找,如果有size个没有使用的字节,就直接标记,并申请;如果发现不够的话,就取堆区的其他地方找一段连续的内存空间,如果找到,就先把之前所申请的内存释放,再把指针指向新找到的内心空间,如果找不到,返回NULL

//    int *p = malloc(2);
//    printf("%p\n", p);
//    p = realloc(p, 4);
//    printf("%p\n", p);
//    free(p);
//    p = NULL;



//    void *memset(void *s, int c, unsigned long n)
//    从s指向的内存开始初始化n个字节的内容为c

//    char *p = malloc(5);
//    p = memset(p, 66, 10);
//    printf("%s\n", p);


//void *memcpy(void *dest,const void*source, zize_t n)
// 从source指向的内存开始拷贝到的dest,拷贝n个字节
//    char string1[] = "iPhone";
//    char string2[] = "ABC";
//    memcpy(string1, string2, 2);//ABhone
//  memcpy(string1 + 3, string2, 2);//iPhABe
//    printf("%s\n", string1);


//    int memcmp(const void *buf1, const void *buf2, unsigned int count)
//    比较buf1和buf2指向的内存是否相同,比较count个字节

//    int *p1 = malloc(4);
//    *p1 = 1;
//    int *p2 = malloc(8);
//    *p2 = 3;
//    int result = memcmp(p1, p2, 1);
//    printf("%d\n", result);


        //定义两个指针,分别用malloc,calloc 对其分配空间保存3个元素,malloc分配的空间用memset清零,随机对数组进行赋值随机范围1-3,赋值后用memcmp比较两个数组,如果相同打印Good 否则打印Failed


    int *p1 = malloc(sizeof(int) * 3);
    int *p2 = calloc(3, 4);
    memset(p1, 0, sizeof(int) * 3);
    for (int i = 0; i < 3; i++) {
        *(p1 + i) = arc4random() % 3 + 1;
        *(p2 + i) = arc4random() % 3 + 1;
    }

    if (memcmp(p1, p2, sizeof(int) * 3) == 0) {
        printf("Good!\n");
    }else{
        printf("Failed…\n");
    }
    free(p1);
    p1 = NULL;
    free(p2);
    p2 = NULL;

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马