文件操作:

  1. 知识点: 持久化
  2. 1.文本文件的读写
  3. 2.二进制文件的读写
  4. 3.缓冲文件系统
  5.  
  6. 1.打开文件
  7. 2.读写文件
  8. 3.保存
  9. 4.关闭文件
  10.  
  11. ======================================
  12. 文本文件的读写
  13. 1.文件的打开
  14. 1)打开模式
  15. r(read) 读文件,不存在,打开失败
  16. w(write) 写文件,如果文件不存在,创建文件,存在则清空文件内容
  17. a(append) 以追加方式写文件
  18.  
  19. a+ 读写方式打开,以追加方式写文件
  20. r+ 读写方式打开,文件存在打开
  21. w+ 读写方式打开,文件不存在创建,存在打开并清空
  22. 2)函数原型
  23. FILE *fopen(const char *path,
  24. const char *mode)
  25. 思考:如果打开的文件不存在会如何
  26. 2.文件的关闭
  27. 1)函数原型
  28. int fclose(FILE *file);
  29. 3.读写文件内容
  30. 1)按字符读文本文件,从文件读取一个字符
  31. 1>函数原型
  32. int fgetc(FILE *file);
  33. 函数返回值:读取成功返回该字符的ascii码,失败返回-1
  34. 1.如果读到文件末尾,返回-1
  35. 2.如果打开方式不对,返回-1
  36.  
  37. 思考:如何判断读到文件末尾
  38. 2)按字符写文本文件,向文件写入一个字符
  39. int fputc(int c, FILE *fp);
  40. 函数返回值:写入成功返回写入字符对应的ascii码,失败返回-1
  41. 1.打开方式不对,返回-1
  42. 2.磁盘空间不足,返回-1
  43. 3.对文件没有写权限,返回-1
  44.  
  45. 练习:
  46. 1.通过循环将字符数组中的内容写入到文件中
  47. 2.读取文件中的文件内容
  48. 3)按行读文本文件,从文本读取一行字符
  49. 1>函数原型
  50. char *fgets(char *buf, int size, FILE *fp);
  51. stdin stdout stderr
  52. fgets(buf, 100, stdin);
  53.  
  54. 函数返回值:读取成功返回读取和参数buf相同的地址,失败返回NULL
  55. 4)按行写文本文件,向文本写入一行字符
  56. 1>函数原型
  57. int fputs(char *s, FILE *fp);
  58. 函数返回值:返回成功写如的字符数,失败返回-1
  59. 5)格式化读写文本文件
  60. 1>格式化输出函数原型,按照指定格式将内容写入文本文件
  61. %s|%d|%d|%d|%d|%c
  62.  
  63. %s 角色名 char *name
  64. %d 级别 int level
  65. %d int boold
  66. %d int act
  67. %d int def
  68. %c y/n char boss
  69.  
  70. int fprintf(FILE *fp, const char *fmt, …);
  71. 函数返回值:成功返回写入的字符数,失败返回-1
  72.  
  73. 2>格式化输入函数原型,按照指定格式从文本文件读取内容
  74. int fscanf(FILE *fp, const char *fmt, …);
  75. %[^'|']
  76. 函数返回值:成功返回对应读取的变量个数,失败返回-1
  77. 练习:1.按照指定格式保存自身的基本信息
  78. 2.按照指定格式读取自身的基本信息并且输出
  79. =============================================
  80. 二进制文件的读写
  81. 需求:
  82. 1.现在需要保存班级中的所有学生的身高信息
  83. int height[10]
  84. %s|%d|%d
  85. a|9|100
  86. a|100|9
  87. double score[10]
  88. 2.保存学生的完整信息
  89. 1.文件的打开
  90. 1)读写模式
  91. 同上
  92. 2.读写文件内容
  93. 1)读取函数,从文件读取数据到内存中
  94. size_t fread(void *ptr, size_t size,
  95. size_t n, FILE *stream);
  96. 参数:1.要保存数据的首地址
  97. 2.每次读取的数据大小
  98. 3.读取次数,每次读取都会在首地址后+对应的数据大小
  99. 4.读取的文件
  100. 返回值:成功返回读取的次数,失败返回0
  101. 2)写入函数,把内存的一块数据写入到文件
  102. size_t fwrite(void *ptr, size_t size,
  103. size_t n, FILE *stream);
  104. 参数:1.要写入数据的首地址
  105. 2.每次写入的数据大小
  106. 3.写入次数
  107. 4.写入的文件
  108. 返回值:成功返回写入的次数,失败返回0
  109. 3)文件定位函数,文件随机读写
  110. 1>ftell,读取文件当前读写位置
  111. long ftell(FILE *stream);
  112. 2>设置当前文件读写位置
  113. int fseek(FILE *stream, long offset, int whence);
  114. whence:
  115. SEEK_SET 相对与文件开头
  116. SEEK_CUR 相对于当前位置
  117. SEEK_END 相对于文件末尾
  118. 练习:将文件位置指针向后移动n个位置
  119. 然后写入数据,查看最后的结果=============================================
  120. 缓冲文件系统
  121. 思考:printf的内容一定会马上输出到屏幕吗
  122. 1.缓冲系统的作用
  123. 2.缓冲的过程
  124. printf->fprintf->缓冲区->write
  125. 行缓冲
  126. 全缓冲 fflush(fp)
  127. 无缓冲 stderr
  128.  
  129. 3.手动刷新缓冲
  130. fflush
  131. 4.系统的标准输输入,输出,错误输出
  132. stdin, stdout, stderr
  133. =============================================
  134. 作业:
  135. 1.文件十六进制显示工具
  136.  
  137. fp1 %c —> fp2 %x
  138. fprintf(fp2, “%x”, var);

  

链表:

  1. 知识点:
  2. 1.链表基础
  3. 2.节点的创建和添加 llist_append_node
  4. 3.链表的遍历 llist_print_each
  5. 4.链表的查找与修改
  6. 5.链表的插入与删除
  7. 6.链表的销毁
  8. 7.链表逆序
  9.  
  10. ==========================
  11. 回顾数组
  12. 1.数组的常用操作
  13. 1)插入
  14. 2)修改
  15. 3)遍历
  16. 4)删除
  17. 5)逆序
  18. 2.数组操作的问题
  19. 1)插入和删除的效率低
  20. 1 2 3 5 6 0 0
  21. 1 2 3 4 9 5 6
  22. 1 2 3 4 9 5 6 0
  23. 2)当数组空间不足时需要重新申请内存空间
  24. 3)但是遍历速度快
  25. ==========================
  26. 链表基础
  27. 1.什么是链表
  28. 链表(Linked list)是一种常见的基础数据结构,是一种线性表
  29. 2.链表的作用
  30. 一种数据结构,保存数据
  31. 3.如何创建链表
  32. ==========================
  33. 链表节点的创建和添加
  34. 1.如何创建和添加一个节点
  35. 2.如何插入一个节点
  36. 4.处理链表的框架
  37. void llist_append_node
  38. (struct node *head,
  39. struct node *new)
  40. void llist_change_node(struct node *head,
  41. int id,
  42. char *name)
  43. append *
  44. insert *
  45. search *
  46. change
  47. delete
  48. destory
  49. print_all *
  50. print_node
  51.  
  52. 5.添加节点模块append
  53. 练习:添加一个节点到头结点后面
  54. ==========================
  55. 链表的遍历
  56. 1. llist_print_each函数
  57. void llist_print_each(struct node *head);
  58. 练习:
  59. 1.遍历输出链表内容
  60. 2.向链表添中加多个节点
  61. ==========================
  62. 链表的查找与修改
  63. 1. llist_search_node函数
  64. struct node *llist_search_node(struct node *head, int id)
  65. void llist_print_node(struct node *nd)
  66. 1)遍历链表
  67. 2)比较要搜索的内容是否和节点数据内容匹配
  68. 3)返回节点地址
  69. 练习:
  70. 1.查找指定id的学生信息,并输出该信息
  71. 2.change函数
  72. 1)搜索要修改的节点空间
  73. 2)修改节点内的数据
  74. 1.修改指定id的学生性别
  75. ==========================
  76. 链表的插入和删除
  77. 1. llist_insert_node函数
  78. void llist_insert_node(struct node *head,
  79. struct node *nd, int id)
  80. 1)创建一个新节点
  81. 2)插入到指定位值
  82. 练习:
  83. 链表包含10个节点
  84. id=3id=4 <== tmp
  85. id=1
  86. 1.创建一个新节点并且插入到第一个节点的前面
  87. 2.创建一个节点并且插入到第三和第四个节点之间
  88. 2.delete函数
  89. void llist_delete_node(struct node *head, int id);
  90. 1)修改该节点上一个节点的指向
  91. 2)释放当前节点
  92. 练习:
  93. 1.删除id1节点
  94. 2.删除id10节点
  95. 3.删除id5节点
  96. ==========================
  97. 链表销毁
  98. 1.destory函数
  99. int llist_destory(struct node *head);
  100. 1)销毁和清空是两种不同的操作
  101. 例如:倒空杯子的水和砸碎杯子两个操作
  102. 练习:
  103. 销毁上面创建的链表
  104. ==========================
  105. 链表逆序
  106. H->A->B->C->D->E
  107. ^ ^ ^
  108. p pp t
  109. 1.inverse函数
  110. void llist_inverse(struct node *head);
  111. 练习:
  112. 1.按照上述顺序实现一个链表的逆序,并输出逆序的结果
  113. ==========================
  114. 多文件封装
  115. 1.头文件
  116. 2.实现文件
  117. ==========================
  118. 创建一个班级链表,该链表包含10个学生信息
  119. 1.每个学生包含信息有
  120. 姓名,年龄,身高,性别,语数英三门成绩
  121. 2.实现:
  122. 1)添加学生信息
  123. 2)输出所有的学生信息
  124. 3)搜索指定学生的信息,并且输出
  125. 4)将指定学生插入到指定学生的前面
  126. 5)删除指定学生信息
  127. 6)销毁班级链表
  128. ========================
  129. enume menu{
  130. EXIT, ADD, SONE, SALL,
  131. INSERT, DEL, DELALL};
  132. 1.添加学生
  133. 2.查询指定学生信息
  134. 3.查询所有学生信息
  135. 4.学生插队
  136. 5.删除指定学生信息
  137. 6.删除班级
  138. 0.退出系统

  

预处理:

  1. 知识点:
  2. 1.宏的定义 #define #undef
  3. 2.宏与函数的区别
  4. 3.文件包含和多文件编译 #include <> “” #import
  5. 3.条件编译 #if #elif #else #endif
  6. #ifdef #ifndef
  7. 4.typedef关键字
  8.  
  9. > gcc -E 源代码文件.c -o 预处理结果文件.i //预处理
  10. > gcc -S 预处理结果文件.i -o 汇编结果文件.s //编译 翻译为汇编
  11. > gcc -c 汇编结果文件.s -o 目标文件.o //汇编
  12. > gcc 目标文件.o -o a.out //链接 ld
  13. =================================
  14. 宏定义
  15. 0.什么是宏定义
  16. 1)宏定义是C提供的三种预处理功能中的一种,预处理包括宏定义、文件包含、条件编译
  17. 1.宏定义的作用
  18. 1)使用标识符来替换一些常用的代码
  19. for (i = 0; i < 100; ++i)
  20.  
  21. LOOP100
  22. {
  23. printf(“i”);
  24. }
  25. WALK 小明---nickname 别名
  26. 2.宏定义的本质
  27. 1)一种占位符,用来代替一些常用代码
  28. 2)一切以转换为前提,做任何事情之前先要替换
  29. 2.基本的宏定义
  30. 0)#define指令语法!!!!
  31. 宏指令 宏名 宏体
  32. 1)标识符
  33. 2)大写,不加分号结束
  34. 3)使用
  35. 示例:定义常量PI的宏
  36. 练习:
  37. 定义数组大小的宏
  38. 定义重力加速度宏 9.8 G
  39. 3.带有参数的宏定义
  40. 1)示例:计算两数最大值的宏
  41. 练习:
  42. 1.计算两数最小值的宏 ?:
  43. 2.计算两数之和的宏,两数之积
  44.  
  45. 思考:ADD(1,2)*ADD(1,2)结果
  46.  
  47. 4.宏替换的问题
  48. 1)宏替换作用的演示,gcc编译参数
  49. 2)思考:能否嵌套定义或调用
  50.  
  51. 5.常用宏
  52. 2)字母大小写转换
  53. TOLOWER ch + 32
  54. TOUPPER ch - 32
  55.  
  56. 4)设置指定数某位为10
  57. SET1, SET0
  58.  
  59. 5)获取某一位的值
  60. GETBITS
  61. 6)取得一个short的高1个字节和低1个字节
  62. SLOW
  63. SHIGH
  64. 7)将short的高字节和低字节互换
  65. 8) 交换两数宏
  66. 9)安全释放内存宏 SAFTY_FREE
  67.  
  68. 6.宏和函数的区别
  69. 1)思考:宏的本质和函数的本质
  70. 2)思考:宏和函数调用的速度,安全性和空间
  71. 3)回忆函数调用的过程
  72. 函数调用需要开辟栈空间,保存参数和局部变量
  73. 4)本质:宏只是替换,并不会产生函数调用
  74. 5)速度:宏不占运行时间,只占编译时间,函数调用占运行时间
  75. 6)安全:宏不会检查参数类型,函数会检查参数类型
  76. 7)空间:宏的参数不占用空间,函数的用空间
  77. 8)能否调用自身:宏不能进行递归调用,函数可以
  78. 思考:如何结合宏与函数的优势
  79. 1.代码非常简单而又十分常用的时候使用宏
  80. 2.代码非常复杂,一般使用函数
  81. ==================================
  82. 文件包含和多文件编译
  83. 1.思考:如何实现多人合作项目
  84. 接口---->函数原型 .h //head
  85. 实现---->函数定义 .c
  86.  
  87. cvs git svn
  88.  
  89. 2.回忆函数定义和声明
  90. 3.头文件和源文件
  91. 4.#include指令语法!!!!
  92. 1)本质:头文件包含实际是替换文件内容
  93. 2)作用:实现声明和实现相分离,进一步使程序更加的模块化
  94.  
  95. #include <stdio.h> 尖括号表示系统标准目录
  96. 双引号表示自定义路径
  97. add, sub, mut, div
  98. 5.示例:链表的实现的声明相分离
  99. 练习:
  100. 1.实现加减乘除四则运算,并将函数的声明与实现相分离
  101. 并编写测试函数测试该些函数
  102.  
  103. A B C D 200 100
  104.  
  105. ===================================
  106. 条件预编译
  107. 需求:现在用户只购买系统中的某些模块
  108. 1.思考:如何可以简单快速的在编译的过程中满足用户的需求
  109. 2.#ifdef 条件编译语法!!!!
  110. #ifndef
  111. 1)作用:模块选择
  112. 示例:判断是否定义过PI
  113. 练习:判断是否有定义上述的常用宏
  114. 思考:
  115. 1.如何可以安全,快速的注释代码
  116. 2.// 和 /**/注释是否可以嵌套使用
  117. 3.#if 条件编译语法!!!!
  118. 1)作用
  119. 快速安全的注释代码
  120. 4.安全注释
  121. 思考:如果重复包含头文件会如何
  122. 5.防止头文件重复包含
  123. ===================================
  124. 调试宏
  125. NSLog
  126. 思考:如何使用printf调试代码,是否方便移出
  127. 1.调试宏定义
  128. INFO, WARN, ERROR, DEBUG
  129. 2.调试开关
  130. 3.预定义宏
  131. printf("line = %d, file = %s, DATA = %s, TIME = %s",
  132. __LINE__, __FILE__, __DATE__, __TIME__);
  133. __LINE__:行号
  134. __FILE__:文件名
  135. __DATE__:日期 %s
  136. __TIME__:时间
  137. __FUNCTION__, __func__:函数名
  138. ===================================
  139. typedef关键字 int4 int32 int64
  140. 思考:程序的跨平台性 64 32 16 8
  141. int int int2
  142. long long long
  143.  
  144. size_t
  145.  
  146. long long int64
  147. long
  148.  
  149. 1.typedef作用
  150. 1)typedef常用来定义一个标识符和及关键字的别名,并不分配实际的内存
  151. 2)typedef可以增强程序的可读性
  152. 3)typedef可以增强标识符的灵活性
  153. 2.typedef本质
  154. typedef本质为类型的别名
  155. 3.typedef语法使用!!!!
  156. 4.重定义结构体
  157. 5.重定义类型
  158. 6.typedefdefine的区别
  159. 1)typedef是为了程序的可读性而为标识符另起的别名,而
  160. definec语言中是为了定义常量,常用代码替换
  161. 2)define可以使用#ifdef和#ifndef来进行逻辑判断

  

动态内存分配:

  1. 知识点:
  2. 动态内存管理
  3. 1.数据在内存中的存储
  4. 2.内存分配mallocrealloccalloc函数使用和注意事项
  5. 3.free函数使用
  6. 4.堆和栈的区别 .heap .stack .bss .data .rodata
  7. 5.常用内存操作函数
  8. ==============================
  9. 内存使用
  10. 1.回顾函数在使用时候所开辟的内存栈
  11. 2.变量所在的内存空间
  12. 3.栈空间的限制 stack
  13. 1)栈大小:一般在2M左右
  14. 4.栈数据的特点
  15. 1)回顾局部变量的生命周期
  16. 2)每个变量的内存大小均在编译时候确定,空间由操作系统分配
  17. 3)数据由系统自动释放
  18. 4)数据分配在栈段
  19. 思考:
  20. int var;
  21. return &var;
  22. 20000 / 1000 == 20
  23. 0.是否可以返回函数执行过程中局部变量的内存地址
  24. 1.如果需要的内存栈无法提供足够的内存容纳我们的数据怎么办
  25. 2.如果需要将函数内的数据保存到程序结束再销毁,是否可以
  26. 5.堆空间的使用 heap
  27. 1)堆空间的特点
  28. 1>大小由程序员决定,空间由程序员分配
  29. 2>大小在运行时候确定
  30. 3>由程序员手动释放
  31. 4>数据分配在堆段
  32. ==============================
  33. 动态内存分配函数
  34. 1.malloc 内存分配
  35. 1)函数原型
  36. void *malloc(size_t size)
  37. void *calloc(int n, size_t size)
  38. 申请size个字节的内存
  39. 2)函数使用
  40. void *p = malloc(4096 * 1024 * 1024);
  41. 3)分配内存注意
  42. 1)函数执行完后如果成功,返回该size大小内存的首地址
  43. 2)函数执行失败返回NULL
  44. 3)malloc会在堆上寻找一块size个字节的内存返回给用户
  45. 4)使用之前一定要判断是否分配成功,因为malloc函数执行有可能会失败(内存不足)
  46. 1.内存不足
  47. 2.没有足够大的连续内存空间
  48.  
  49. 练习:
  50. 1.分配一能足够保存double 数据的内存空间,并且赋值输出
  51. 2.分配一个足够保存ndouble类型数据 的内存空间,并且赋值输出
  52.  
  53. 思考:如果现在所使用的内存空间不足,想要重新分配一块内存,但是又不想丢失原来的数据,么办
  54. 2.realloc 重新分配内存
  55. 1)函数原型
  56. void *realloc(void *ptr, size_t size)
  57. ptr指针后再分配size个字节的内存空间
  58. 2)函数使用
  59. realloc(ptr, 40);
  60. 3)函数使用注意
  61. 1)思考:如果ptr执行NULL会如何
  62. 2)思考:如果在ptr后没有size个字节的内存会如何
  63. 3)思考:函数返回值是什么
  64. 练习:使用realloc函数为malloc分配的内存向后扩展40个字节的空间
  65. 0.比较返回地址是否为原理的内存地址
  66. 1.输出新空间中的所有内容
  67. 2.对新的内存空间进行赋值
  68.  
  69. ================================
  70. 内存释放函数
  71. 思考:申请的内存是否需要释放,不释放是否可以,会造成怎样的结果
  72. 1.free 内存释放
  73. 1)函数原型
  74. void free(void *ptr)
  75. 2)函数使用
  76. free(ptr)
  77. 3)函数使用注意
  78. 思考:释放后的内存是否可以继续使用
  79. 1>只能对有效分配的内存进行释放
  80. 思考: 被释放的内存还可以引用吗
  81. 2>思考:如果对一个指针连续释放两次会如何
  82. 3>不能释放栈上的空间
  83. 3>如何避免上述情况
  84. 练习:释放mallocrealloc申请的内存空间
  85. ================================
  86. 堆和栈的区别
  87. 1.分配大小
  88. 不能超过2M
  89. 可以任意分配,只要系统有内存
  90. 2.分配速度


  91. ===============================
  92. 数据在内存中的存储与分布
  93. 1.数据区:栈,堆,数据段
  94. 2.
  95. 1)进入函数时分配空间,函数结束时释放空间
  96. 2)局部变量,函数参数均在此段中
  97. 3)此段中的初始值均为随机数
  98. 3.
  99. 1)malloc申请,free释放
  100. 2)初始值
  101. 4.数据段
  102. 1)全局变量 bss 没有初始化的全局变量
  103. 2)static静态变量
  104. 3)字符串常量(只读静态存储取) rodata
  105. ================================
  106. 常用内存处理函数
  107.  
  108. 1.memset 将指定地址指定大小设置为指定内容
  109. 1)函数原型
  110. void *memset(void *ptr, int c, size_t len)
  111. 2)函数使用
  112. 3)函数使用注意
  113. 练习:分配10个字节的内存空间
  114. 1.输出该空间中的内容
  115. 2.将该内存空间上的内容全部设置为1
  116. 2.memmove 内存拷贝,从s2拷贝len的字节内容到s1
  117. 1)函数原型
  118. void *memmove(void *dst, const void *src, size_t len)
  119. void *memcpy(void *dst, const void *src, size_t len)
  120. 2)函数使用
  121. 3)函数使用注意
  122. ===========================================

  

2014.3.11-C语言学习小结的更多相关文章

  1. 2014.3.5-C语言学习小结

    知识点: 1.结构体 struct 2.联合体 union 3.枚举 4.结构.联合与函数 =========================== 结构体 思考:如果现在希望保存一个学生的信息,该如何 ...

  2. 2014.3.4-C语言学习小结

    位操作: 知识点: 1.位运算符 2.位移运算符 1.将指定位设置为12.将指定位设置为03.获取指定位的内容 ==========================复习二进制 1.二进制转换 10-- ...

  3. 2014.3.6-C语言学习小结

    链表基础: 知识点: 1.链表基础 2.节点的创建和添加 llist_append_node 3.链表的遍历 llist_print_each 4.链表的查找与修改 5.链表的插入与删除 6.链表的销 ...

  4. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

  5. 18 11 04 初用单片机 c语言学习

    ---恢复内容开始--- 1 作为单片机使用的的 c 语言学习 ++ 增位运算符 在原有基础上加一 -- 相同 由于单片机只有 ~ 取反 & 两个 参数里有没有 | 两个 参数里有没有 ^ 两 ...

  6. objective-c基础教程——学习小结

    objective-c基础教程——学习小结   提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...

  7. 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

    原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...

  8. C语言学习 第八次作业总结

    本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...

  9. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

随机推荐

  1. 最少换乘(Dijkstra)

    Description 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. 年轻人旅游不怕辛苦,不怕劳累,只要费用低就行.但Dr. Kong年 ...

  2. HDU 2616 Kill the monster (暴力搜索 || 终极全阵列暴力)

    主题链接:HDU 2616 Kill the monster 意甲冠军:有N技能比赛HP有M怪物,技能(A,M),能伤害为A.当怪兽HP<=M时伤害为2*A. 求打死怪兽(HP<=0)用的 ...

  3. oracle_安装_win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法

    1)安装Oracle 11g 64位 2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0) 下载instantclient-basic-wi ...

  4. SVN有用教程

    好用的Windows下SVNclient——Tortoise SVN的下载地址: http://tortoisesvn.tigris.org/ 文档: http://www.subversion.or ...

  5. C#邮件收发

    public class Mail { private string mailkey; private string mailSecret; public string mailFrom; publi ...

  6. css3简单几步画一个乾坤图

    原文:[原创]css3简单几步画一个乾坤图 效果如上,鼠标移上去会有动画. 代码如下非常简单: <html> <head> <style> .outer{heigh ...

  7. iOS、真机调试

    Xcode中IOS.真机测试 一.购买开发者账号(需要有信用卡.每年支付$99.0) 二.直接淘宝购买一个.用于测试,但是不能上传App 1.获取手机的UUID(Identifier xxxxxx9e ...

  8. TextView随键盘弹出上移高度

    很多时候我们都在为键盘遮挡了原本就不大的屏幕时而烦恼,特别是当用户处于编辑状态时,键盘下面的内容就看不见了,用户只能处于盲打状态了.现在有一种简单的解决办法,基本思路就是,添加通知.一直监听键盘事件, ...

  9. iOS程序发布时出现your application is being uploaded解决办法

    当用Xcode发布app时候出现“your application is being uploaded”或者用Application Loader 一直出现“ 正在通过ITUNES STORE进行鉴定 ...

  10. MongoDB集群

    高可用的MongoDB集群   1.序言 MongoDB 是一个可扩展的高性能,开源,模式自由,面向文档的数据库. 它使用 C++编写.MongoDB 包含一下特点: l  面向集合的存储:适合存储 ...