Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71942
  • 博文数量: 10
  • 博客积分: 216
  • 博客等级: 入伍新兵
  • 技术积分: 163
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-21 20:14
文章分类
文章存档

2012年(10)

我的朋友

分类: C/C++

2012-11-22 20:58:14


在C中编写的程序所占用的主要分为以下几个部分:
* 栈(stack):由编译器自动分配与释放,存放函数的参数值、局部变量的值、返回地址等,它的操作方式类似于数据结构中的栈。
* 堆(heap):一般由程序员动态分配(如调用malloc函数)和释放(调用free函数),若程序员不释放,程序结束时可能由操作系统回收(慎重)。
* 数据段(data):存放的是全局变量、静态变量、常数。根据存放的数据,数据段又可以分为普通数据段 (包括可读可写/只读数据段,存放静态初始化的全局变量或常量)、BSS数据段(存放未初始化的全局变量)。
* 代码段(code):用于存放程序的代码。

示例:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int a = 0; //可读可写数据段
  5. char *p1; //BSS段

  6. int main()
  7. {
  8.     int b;                      /*b 在栈中*/
  9.     char *p2;                   /*p2 在栈中*/
  10.     char *p3 = "123";           /*123 在常量区,p3在栈中*/
  11.     char str[] = "abc";         /*str 在栈中,abc 在常量区*/
  12.     static int c = 0;           /*可读可写数据段*/
  13.     
  14.     p1 = (char *)malloc(10);    /*分配得来的10字节的区域在堆中*/
  15.     p2 = (char *)malloc(20);    /*分配得来的20字节在堆中*/

  16.     /*将常量区“hello world” 字符串复制到刚分配的堆中*/
  17.     strcpy(p1, "helloworld"); 

  18.     return 0;
  19. }

阅读(1444) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

技术斌2012-12-16 11:04:23

Bean_lee: strcpy(p1, "hello world");
溢出了,所以轻易不要用strcpy,不安全,除非你很清楚你在做写什么。.....
清楚了,谢谢!

Bean_lee2012-12-10 23:38:08

strcpy(p1, "hello world");
溢出了,所以轻易不要用strcpy,不安全,除非你很清楚你在做写什么。

Bean_lee2012-12-10 23:36:26

可以再深入些。