易截截图软件、单文件、免安装、纯绿色、仅160KB
热门标签: c c# c++ asp asp.net linux php jsp java vb Python Ruby mysql sql access Sqlite sqlserver delphi javascript Oracle ajax wap mssql html css flash flex dreamweaver xml
 最新文章 : c

C字符串操作函数


1. 字符串操作函数
程序按功能划分可分为数值运算、符号处理和I/O操作三类,符号处理程序占相当大的比例,符号处理程序无处不在,编译器、浏览器、Office套件等程序的主要功能都是符号处理。无论多复杂的符号处理都是由各种基本的字符串操作组成的,本节介绍如何用C语言的库函数做字符串初始化、取长度、拷贝、连接、比较、搜索等基本操作。
1.1. 初始化字符串
#include <string.h>
void *memset(void *s, int c, size_t n);
返回值:s指向哪,返回的指针就指向哪
memset函数把s所指的内存地址开始的n个字节都填充为c的值。通常c的值为0,把一块内存区清零。例如定义char buf[10];,如果它是全局变量或静态变量,则自动初始化为0(位于.bss段),如果它是函数的局部变量,则初值不确定,可以用memset(buf, 0, 10)清零,由malloc分配的内存初值也是不确定的,也可以用memset清零。
1.2. 取字符串的长度
#include <string.h>
size_t strlen(const char *s);
返回值:字符串的长度
strlen函数返回s所指的字符串的长度。该函数从s所指的第一个字符开始找'\0'字符,一旦找到就返回,返回的长度不包括'\0'字符在内。例如定义char buf[] ......

LINUX C 链表封装


main.c
//初始化队列
void InitQueue(LiQueue *q)
{
  q=(LiQueue*)malloc(sizeof(LiQueue));
    q->front=q->rear=NULL;
}
//判断是否为空
int QueueEmpty(LiQueue *q)
{
 if(q->rear==NULL)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}
//释放
void ClearQueue(LiQueue *q)
{
 QNode *p=q->front,*r;
 if(p!=NULL)
 {
  r=p->next;
  while(r!=NULL)
  {
   free(p);
   p=r;
   r=p->next;
  }
 }
 free(q);
}
//实现队列的入队
void enQueue(LiQueue *q,struct TCPMASSAGE stTcpSendBuff)
{
 //封装结点
 QNode *s;
 s=(QNode*)malloc(sizeof(QNode));
 memcpy(&s->data , &stTcpSendBuff , sizeof(stTcpSendBuff));
 //s->data =e;
 s->next=NULL;
 if(q->rear==NULL)
 {
  q->front =s;
  q->rear =s;
......

LINUX C 链表封装


main.c
//初始化队列
void InitQueue(LiQueue *q)
{
  q=(LiQueue*)malloc(sizeof(LiQueue));
    q->front=q->rear=NULL;
}
//判断是否为空
int QueueEmpty(LiQueue *q)
{
 if(q->rear==NULL)
 {
  return 1;
 }
 else
 {
  return 0;
 }
}
//释放
void ClearQueue(LiQueue *q)
{
 QNode *p=q->front,*r;
 if(p!=NULL)
 {
  r=p->next;
  while(r!=NULL)
  {
   free(p);
   p=r;
   r=p->next;
  }
 }
 free(q);
}
//实现队列的入队
void enQueue(LiQueue *q,struct TCPMASSAGE stTcpSendBuff)
{
 //封装结点
 QNode *s;
 s=(QNode*)malloc(sizeof(QNode));
 memcpy(&s->data , &stTcpSendBuff , sizeof(stTcpSendBuff));
 //s->data =e;
 s->next=NULL;
 if(q->rear==NULL)
 {
  q->front =s;
  q->rear =s;
......

C/C++中空指针与0与NULL和其他若干问题小结

什么是空指针常量(null pointer constant)?
[6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.
这里告诉我们:0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一般的 C 系统选择 (void*)0 或者 0 的居多(也有个别的选择 0L);至于 C++ 系统,由于存在严格的类型转化的要求,void* 不能象 C 中那样自由转换为其它指针类型,所以通常选 0 作为空指针常量,而不选择 (void*)0。
什么是空指针(null pointer)?
[6.3.2.3-3] If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
因此,如果 p 是一个指针变量,则 p = 0;、p = 0L;、p = '\0';、p = 3 - 3;、p = 0 * 17; 中的任何一种赋值操作之后(对于 C 来说还可以是 p = (void*)0;), p 都成为一 ......

C/C++中空指针与0与NULL和其他若干问题小结

什么是空指针常量(null pointer constant)?
[6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.
这里告诉我们:0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一般的 C 系统选择 (void*)0 或者 0 的居多(也有个别的选择 0L);至于 C++ 系统,由于存在严格的类型转化的要求,void* 不能象 C 中那样自由转换为其它指针类型,所以通常选 0 作为空指针常量,而不选择 (void*)0。
什么是空指针(null pointer)?
[6.3.2.3-3] If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
因此,如果 p 是一个指针变量,则 p = 0;、p = 0L;、p = '\0';、p = 3 - 3;、p = 0 * 17; 中的任何一种赋值操作之后(对于 C 来说还可以是 p = (void*)0;), p 都成为一 ......

C编码规范

1 文档说明
2 文件结构
2.1 为了更好的利用CVS的修改记录功能,在commit的时候,认真的填写修改记录。
2.2 为防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块;
2.3 使用__cplusplus宏定义,使程序可以方便的移植至C++环境下;
2.4 用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索);
2.5 用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索);
2.6 所有函数都必须在相应的头文件中添加函数原型声明。
3 程序的版式
3.1 在每个函数结束之后都必须添加一个空行。
3.2 程序中或者函数内逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔。
3.3 一行代码只做一件事情,如只定义一个变量,或只写一条语句。
3.4 if、for、while、do等语句自占一行,执行语句不得紧跟其后;不论执行语句有多少都要加{ },这样可以防止书写失误;
3.5 尽可能在定义变量的同时初始化该变量(就近原则);
3.6 函数名之后不要留空格,紧跟左括号‘(’;
3.7 ‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格;
3.8 ‘,’之后要留空格,如function(x, y, z)。如果‘;’不是 ......

由atof发现的C中浮点小数不精确问题


比如 输入1.9会显示1.899999 类似的问题
 
由于C语言中对于浮点小数的表达方式的局限导致的。C语言中10进制小数是直接用2进制小数来表示的。由于某些10进制小数根本无法用2进制小数来精确表达,譬如0.1,导致计算机不得不用近似的相差很小的2进制小数来表示这些10进制小数。   
  既然是近似,就一定有差异,多次累加之后这些小差异积累起来出现了如上现象。   
    
  而如果换一种方式来表达浮点小数,应该可以避免这种情况出现,举个笨例子。如果把浮点数用字符串的格式保存,加减乘除都一位位的用整数运算来仿真手工算法,显然一定会得出和手工算法一致的精确结果的
......

标准C的头文件assert.h学习总结

1:类似junit的断言,只是在assert中的断言,如果不满足的话就程序退出。
比如
#include <assert.h>

int main(void)
{
assert(6 < 5);
system("pause");
return 0;
}
在执行到assert(6 < 5);
的时候因为不满足断言,于是程序退出。
如果不想让assert(6 < 5)起作用,就在最上面添加宏定义#define NDEBUG
要添加在#include <assert.h>上面才起作用
全部的如下:
#define NDEBUG
#include <assert.h>

int main(void)
{
assert(6 < 5);
system("pause");
return 0;
}
......
总记录数:2015; 总页数:336; 每页6 条; 首页 上一页 [125] [126] [127] [128] 129 [130] [131] [132] [133] [134]  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号