C 内存分配问题

在C中内存,可以划分为三种,堆、栈和静态存储区。
栈就是auto变量存放区域,自动释放,在编译时候需要知道空间大小。
堆一般用作开辟动态存储区,需要人工开辟,人工释放,可以在运行是开辟。比如说c中的malloc和free函数,还有C++中的new和delete。
还有就是静态存储区,这个区域存放一些常量,不能改变值。
char *a="I love zhong wanjing";

char a[]="I love zhong wanjing";
第一个是字符串在静态存储区存储,a是定义在栈,是一个“远程指向”,不能对 *a进行重新赋值,但是可以通过改变a指向的地址来从新赋值,如
      char *b=“yes”;
      a=b;
      printf("%s",a);显示为yes。
第二个是a直接就是在栈中,可以直接重新赋值。
在C中,并没有字符串这个数据类型,而是使用字符数组来保存字符串。C字符串实际上就是一个以null('\0')字符结尾的字符数组,null字符表示 字符串的结束。需要注意的是:只有以null字符结尾的字符数组才是C字符串,否则只是一般的C字符数组。  C字符串定义时可以利用"="号进行初始化,但是以后不能利用"="对C字符串进行赋值。对C字符串的操作需要通过"string"文件中定义的字符串处 理函数。例如:
//字符串的初始化
char a[11] = "huanying";
//字符串的赋值
strcpy(a,"nihao")
//获取字符串的长度,不包括'\0'在内
strlen(a);
printf("%s",a);
在C中也可以使用字符指针来 访问一个字符串,通过字符指针指向存放字符串数组的首元素地址来进行访问.
char *a = "nihao";
printf("%s",a);

遇到的困难:目的是设计一个循环队列来存储从网页中提取的URL,遇到字符串分配内存的错误。
首先明确: char *p=(char *)malloc(12*sizeof(char))的作用是分配12个连续的空间来存储char,只能是字符。
         char **p=(char **)malloc(10*sizeof(char *))的作用是分配10个连续的空间来存储char *指针。
         如果接下来for(i=0;i<10;i++){
                         p[i]=(char *)malloc(sizof(char)*12)
                   }这样p[i]就可以指向存储12个字符的空间了。
尽量不要声明char *p=“aa”;的类型,可以用char p[],或者malloc.

posted on 2012-05-25 12:05  蓝色守望  阅读(142)  评论(0)    收藏  举报

导航