二:获取字符串的两种方法。以及malloc,calloc,ralloc的使用注意点
获取字符串两种方法
1.char ptr[100];
1#include<stdio.h>
2 #include<stdlib.h>
3 #define MAX_SIZE 1024
4 int main()
5 {
6 char *ptr=(char *)malloc(MAX_SIZE*sizeof(char)); malloc分配内存空间。
7 if(NULL==ptr)
8 {
9 printf("malloc error!\n"); 看内存是否分配成功。
10 exit(1);
11 }
12 //memset(ptr,'\0',sizeof(ptr)); 其中‘\0’是表示拿0来填充这100个字节。
13 memset(ptr,'\0',sizeof(char)*MAX_SIZE); 指把空间全部清空。
14 //bzero(ptr,MAX_SIZE)
15 scanf("%s",ptr);
16 printf("ptr=%s\n",ptr);
17 free(ptr); 释放空间。释放以后,ptr没值了,但是还保存了原来的地址, 如果不置为空,会变成野指针
18 ptr=NULL;
19 return 0;
20 }
malloc的头文件#include<stdlib.h>
用了空间再用一次的时候一定要记得清空
通常都是先分配空间,然后检验空间是否分配成功,把空间里面的残留元素都清空,然后初始化,再释放,最后再初始化。
通常用memset来初始化一块内存。
malloc,relloc,calloc的区别。
char *ptr=(char *)malloc(MAX_SIZE*sizeof(char));
char *ptr=(char *)calloc(20,sizeof(char));
1. malloc不能初始化所分配的内存空间,而函数calloc能。如果malloc函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留各种各样的数据,也就是说,使用malloc函数的程序开始时(内存还没有被重新分配)能正常进行,但经过一段时间(内存已经被重新分配,可能会出现一些问题)。
2. calloc会将所分配的空间中的每一位都初始化为零,也就是说如果你是字符类型或整数类型的元素分配内存,那么这些元素将保证会被动的初始化为0,如果你为指针类型的元素分配内存,那么这些元素通常会被初始化为空指针。如果你为实型元素分配内存,则这些元素会被初始化为浮点型的0。
3. realloc可以对给定的指针所指向的空间进行扩大或缩小,无论是扩大还是缩小,原有的内存中的内容将保持不变。对于缩小,则被缩小的那一部分的内容将会丢失,realloc并不保持调整后的内存空间和原来的 内存空间保持同一内存地址,realloc返回的指针很可能指向新的地址。