以图明志

C/C++编程语言

typedef与define在用法上的区别

typedef是为类型取了个“别名”
简单来讲:#define只是简单的进行了替换,而typedef则是为类型取了个“别名”。 #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。如果你把#define语句中的数字9 写成字母g 预处理也照样带入。

PHP服务器脚本

修改phpMyAdmin导入SQL文件的大小限制

检查php.ini配置文件中的三个地方
遇到导入过大文件时,首先检查php.ini 配置文件中的以下三个地方,upload_max_filesize, memory_limit 和post_max_size,并且推荐修改的值要稍大于导入的巨大sql数据库文件;依照这个提示,我修改了以上三个在php.ini中的值以后,重启 了php环境,再次导入时,虽然phpMyAdmin还是显示导入最大限制:20,480 KB,但巨大的80M数据库文件已经被成功的导入了。

C/C++编程语言

C语言中的struct和typedef struct

struct和typedef struct
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

C/C++编程语言

C语言的回归

唯一真正重要的部分是设计
语言之争永远是火药味十足的话题。尤其是 C 和 C++ 的目标市场又有很高的重合性,C++ 程序员往往对C++ 其有着宗教般的虔诚。我想,今天我在自己的 blog 上继续这个战争,一定会换来更多的骂名。只不过这次 Linus 几句话真是说到我心坎里去了,不喊出来会憋坏的。

PHP服务器脚本

PHP CodeBase: 获取远程图片的体积大小

CURL的使用
有时候,我们需要知道远程图片的体积大小,那么PHP如何可以做到呢?这里介绍一个函数,函数的思路是,先CURL获取图片到缓冲区,然后正则获取图片的Content-Length信息就OK了。

PHP服务器脚本

PHP CodeBase: 求最近一个周一和上周一的日期

时间戳的运算
有时候,会有这么一些需求:在每周的周一会更新一些内容,那么我要获取本周周一的数据,或者上周周一的数据,那么就需要知道本周或上周周一的日期了。对于程序来说,需求就变成了:这周的周一是几号?或者说,上周一是几号?

PHP服务器脚本

PHP CodeBase: 将时间显示为“刚刚”“n分钟/小时前”等

PHP的时间轴开发
在很多场合为了显示出信息的及时性,一般会将时间显示成“刚刚”,“5分钟前”,“3小时前”等,而不是直接将时间打印出来。比如微博,SNS类应用就最长用到这个功能。而一般存储在数据库中的时间格式为 Unix时间戳,所以这里记录一个将 Unix时间戳 转化为时间轴显示的PHP函数。

PHP服务器脚本

PHP CodeBase: 过滤XSS攻击的PHP函数

一个通用的过滤函数
关于XSS攻击,如果不是很清楚,可以先看看以下三篇文章:什么是XSS跨站脚本攻击,XSS跨站脚本与CSRF跨站请求伪造,利用XSS注入漏洞能对网站做什么。那么PHP站点如何防御XSS攻击呢?下面的函数可以用来过滤用户的输入,保证输入是XSS安全的。具体如何过滤,可以参看函数内部,也有注释。

PHP服务器脚本

PHP CodeBase: 通过新浪微博API获取数据

使用CURL方法
要获取新浪微博的数据,可以通过他们提供的API,地址:http://open.weibo.com/wiki/API文档_V2。补充一下,json_decode($data) 会输出一个对象,而json_decode($data, true) 则强制输出为数组。获取数组则使用了 CURL 库。

C/C++编程语言

C CodeBase:初始化一个数组

简单强大的C数组
数组在所有的语言中,以C最为简单,就是一起始地址,外加一数组的长度,而且基本上没有任何功能可言。然而,在所有的数组使用中,却是C的这种简单的数组形式,以其灵活性和效率,让人惊叹。C数组从逻辑上讲,是分形一致的(想不到其他词来形容了),分形的意思,就是部分与整体保持一致的构造形式,也即是数组的任何一部分也都是数组。

C/C++编程语言

C语法陷阱:C语言的二维数组模拟

用指针与一维数组理解与构造
现在我们可以考虑二维数组了,正如前面所讨论的,它实际上是以数组为元素的数组,尽管我们也可以完全依据指针编写操纵一维数组的程序,这样做在一维情形下并不困难,但是对于二维数组从记法上的便利性来说采用下述形式就几乎是不可替代了。还有,如果我们仅仅使用指针来操纵二维数组,我们将不得不与C语言中最为“晦暗不明”的部分打交道,并常常遭遇到潜伏着的编译器bug。

C/C++编程语言

C语法陷阱:指针与数组

理解指针与变量间的关系
如果一个指针指向的是数组中的一个元素,那么我们只要给这个指针加1,就能够得到指向数组中下一个元素的指针,同样的,如果我们给这个指针减一,得到就是指向该数组中前一个元素的指针。对于除了1以外的其他整数的情形,以此类推。上面这段讨论暗示了这样一个事实:给一个指针加上一个整数,与给该指针二进制表示加上同样的整数,两者的含义截然不同。

C/C++编程语言

C语法陷阱:理解如何声明一个数组

声明一个数组的实质
语言中指针与数组这两个概念之间的联系是密不可分的,以至于如果不能理解一个概念,就无法彻底理解另一个概念。C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来。然而,C语言中数组的元素可以是任何类型的对象,当然也可以是另外一个数组。

C/C++编程语言

C语法陷阱:理解(*(void(*)())0)()

用(void (*)())0来替换函数指针fp
拥有了前面的预备知识,我们现在可以分两步来分析表达式 (*(void(*)())0)() 。第一步,假定变量fp是一个函数指针,那么如何调用fp所指向的函数呢?因为fp是一个函数指针,那么*fp就是该指针所指向的函数,所以(*fp)()就是调用该函数的方式。

C/C++编程语言

C语法陷阱:从变量与函数的声明到类型转换符

一个转换“恐慌区”到“学习区”的过程
程序设计错误,或者你无法按某个算法写出程序,实际上反应的是程序员与该程序与算法的“心智模式”不匹配,或者说,你的心智模式无法包容与理解下该程序算法所包含的思想。比如下面的一个语句:( *( void(*)())0)();这是一个什么东西呢?

C/C++编程语言

const int* p 表达的是什么意思

const int* p 的语义问题
先来看一行代码:const int* p = new int(10); 问题来了,new出来的地址应该是块堆内存啊,const常量应该保存在内存静态区啊,那指针p指向的那块内存到底是在静态区还是堆里?const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
32 / 34 首页 < Prev 30 31 32 33 34 Next > 尾页 页码: