首页 > 技术文章 > 内存使用

0515offer 2015-06-08 11:17 原文

//
//  main.c
//  内存使用
//
//  Created by zhangxueming on 15/6/8.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//内存操作函数
//1.申请内存
//2.判断内存是否申请成功
//3.对申请到的内存初始化(可选)
//4.使用内存
//5.释放内存
//6.将指向该内存的指针赋值为NULL

//int main(int argc, const char * argv[]) {
//    char *pstr = (char *)malloc(100*sizeof(char));
//    if (!pstr) {
//        return -1;
//    }
//    memset(pstr, 0, 100);
//    scanf("%s", pstr);
//    printf("%s\n", pstr);
//    free(pstr);
//    pstr =NULL;
//    return 0;
//}

//内存清空函数
//void    *memset(void *mem, int c, size_t n);
//int main(int argc,const char *argv[])
//{
//    //printf("size = %ld\n", sizeof(void));
//    
////    int a[10]={1,2,3,4,5};
////    memset(a, 0, 40);
////    for (int i=0; i<10; i++) {
////        printf("%d", a[i]);
////    }
//    
//    char str[100]="hello world";
//    memset(str, 0, 100);
//    for (int i=0; i<100; i++) {
//        printf("%d", str[i]);
//    }
//    return 0;
//}

//
//void    *calloc(size_t count, size_t size);
//申请的内存空间大小 = count * size;

//利用malloc memset 实现calloc

void *mycalloc(size_t count, size_t size)
{
    void *p= malloc(count*size);
    if (!p) {
        return NULL;
    }
    memset(p, 0, count*size);
    return p;
}

//int main(int argc,const char *argv[])
//{
//    int *pscore =mycalloc(10, sizeof(int));
//    for(int i=0; i<10; i++)
//    {
//        //scanf("%d", &pscore[i]);
//        scanf("%d", pscore+i);
//    }
//    for (int i=0; i<10; i++) {
//        printf("%d ", *(pscore+i));
//    }
//    free(pscore);
//    pscore = NULL ;
//    return 0;
//}

//内存查找函数
//memchr
//void    *memchr(const void *dst, int c, size_t n);

//int main(int argc,const char *argv[])
//{
//    char str[100]="hello world";
//    
//    printf("%s\n", memchr(str, 'o', 100));
//
//    return 0;
//}


//修改内存大小
//realloc
//void    *realloc(void *, size_t);

//int main(int argc,const char *argv[])
//{
//    char *pstr = (char *)malloc(50*sizeof(char));
//
//    printf("%p\n", pstr);
//    
//    scanf("%s", pstr);
//    
//    pstr = realloc(pstr, 1000*sizeof(char));
//    
//    printf("%p\n", pstr);
//    
//    printf("%s\n", pstr);
//
//    return 0;
//}

//int main(int argc, const char *argv[])
//{
//    char *pstr=malloc(100*sizeof(char));
//    if (!pstr) {
//        return -1;
//    }
//    scanf("%s", pstr);
//    printf("%s\n", pstr);
//    
//    realloc(pstr, 0);//<==> free(pstr)
//    //free(pstr);//同一块内存不能被释放两次
//    pstr = NULL;
//    
//    
//    return 0;
//}

//int main(int argc,const char *argv[])
//{
//    char *pstr = realloc(NULL, 100);//<==> malloc(100)
//    if (!pstr) {
//        return -1;
//    }
//    scanf("%s", pstr);
//    printf("%s\n", pstr);
//    realloc(pstr, 0);
//    pstr = NULL;
//    return 0;
//}

#include <string.h>
//内存比较函数
//int     memcmp(const void *, const void *, size_t);

//int main(int argc,const char *argv[])
//{
//    char str1[20]="helloworld";
//    char str2[20]="helloaorld";
//    //int a[5]={1,3,5};
//    
//    int ret = memcmp(str1, str2, 20);
//    printf("ret = %d\n", ret);
//
//    return 0;
//}

//内存拷贝函数
//void    *memcpy(void *dst, const void *src, size_t n);
//dst 与src 指针指向的内存空间不能有重叠的部分

//int main(int argc,const char *argv[])
//{
//    char str1[100]="hello world";
//    char str2[100]={};
//    
//    str1[19]='A';
//    
//    memcpy(str2, str1, 20);
//    printf("str2 = %s\n", str2);
//    printf("str2[19]=%c\n", str2[19]);
//    return 0;
//}

//内存移动函数
//void    *memmove(void *dst, const void *src, size_t n);
//dst 与src 指向的内存空间可以重叠

//int main(int argc,const char *argv[])
//{
//    char str[100]="hello world";
//    
//    memmove(str, &str[1], 11);
//    printf("str = %s\n", str);
//    
//    return 0;
//}

//strstr

char *mystrstr(const char * src, const char *substr)
{
    while (*src) {
        char *tempstr = (char *)src;
        char *tempsubstr = (char *)substr;
        while (*tempstr==*tempsubstr) {
            tempsubstr++;
            tempstr++;
            if (*tempsubstr=='\0') {
                return (char *)src;
            }
        }
        src++;
    }
    return NULL;
}

//int main(int argc,const char *argv[])
//{
//    char *str1 = "hello worworld qianfeng";
//    printf("%s\n", mystrstr(str1, "world"));
//    return 0;
//}

//memmem
//void    *memmem(const void *mem, size_t size1, const void *submem, size_t size2)

//int main(int argc, const char *argv[])
//{
//    char *str="helloworldqianfeng";
//    
//    printf("%s\n",memmem(str, 18, "world", 5));
//    return 0;
//}


//把数字字符串转换成整型
//atoi
//atof

int main(int argc, const char *argv[])
{
    printf("%d\n", atoi("    123abc"));
    return 0;
}

 

推荐阅读