自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 指针赋值时的相容性

这个标题不知道算不算确切,今天从《c专家编程》看起,然后发散到不知什么地方去了,乱乱的看了一堆东西。还是先从《c专家编程》说起吧。今天看了一个开头,主要是在1.9节的一个问题。foo(const char** p) {}main(int argc, char ** argv){     foo(arvg);}会出现警告:参数和原型不匹配。也就是说char **和const char

2009-09-15 23:24:00 860

原创 解析c语言的复杂声明实践

看了那篇文章,总结一下,解析复杂声明其实就是从最里面的未定义标识符开始,左边和右边同时找一对符号来配对,不断向外扩展,最后完成解析。int (*(*func)[5][6])[7][8];func是个指针,这个指针指向什么呢。那我们就可外围,左边和右边找一对符号:* [5][6],这表示一个二维数组,数组元素是指针。所以func指向的就是这个数组啦。但是这个数组元素指针指向什么我们还是不知道的,

2009-09-14 18:45:00 377

转载 解析c语言的复杂声明

以前不知道怎么看那种复杂的声明,看了这篇文章就清楚多了===================================上一章费那么多唇舌讨论C语言的声明,其实目的都是为了这一章,期望读者通过对C语言声明形式的详细了解,树立声明嵌套的观念,因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面

2009-09-14 18:01:00 596

原创 栈的默认大小

今天看了几篇讨论堆和栈的文章,里面讲到栈的默认大小可能是1m,也可能是2m,好奇之下试试。int main (int argc, char *argv[]){ int tmp[1000*256*2+1000*3] = {0};}大概就是2.3m吧,如果再大,就会出现5 [main] Test 3204 handle_exceptions: Except

2009-09-14 16:17:00 8758 1

转载 堆和栈区别2

这是另一篇讨论堆和栈的,更深入些=====================五大内存分区             在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。             栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。             堆,就是那些由new分配的

2009-09-14 16:14:00 705

转载 堆和栈的区别

这篇是CSDN的 laomai(老迈)写的,虽然一些细节有异议,但是还是讲得比较清楚的。===================== 一、预备知识—程序的内存分配     一个由c/C++编译的程序占用的内存分为以下几个部分     1、栈区(stack)—       由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。     2、堆区(heap

2009-09-14 15:58:00 461

转载 内存分配详解、指针与数组[C++][内存管理]

这篇讲得比较基本。==============程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。     内存分配方式    (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,st

2009-09-14 15:47:00 625

原创 指针+1的问题

指针 + 1 并不是指针代表的地址值 + 1. 指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。至于真实的地址加了多少,要看原来指针指向的数据类型是什么。 char a = a;char *p = &a;cout输出:0012FF33  0012FF34p指向的是一个字符,p+1就是移动一个字符大小,一个字符就是一个字

2009-09-12 15:14:00 9804 3

原创 解决vsftpd:cannot open config file:-l的问题

昨天莫名奇妙suse的vsftpd就起不来了,连接时提示cannot open config file:-l 。在Google上一搜,这个问题一大推,但是没有明确的答案。乱七八糟捣鼓了一天,还是不得行,恼火啊。晚上回去后专门在csdn的blog上搜,搜出来的果然更有质量些。有了一点头绪。我现在的配置是通过xinetd来启动vsftpd。xinetd的配置文件是/etc/xinetd.d/vsftp

2009-09-11 17:58:00 6426

原创 奇怪的搞定了conficker.aa

昨天到今天上午,公司的电脑,node32一直弹出来“conficker.aa病毒,已删除”。不会这么衰吧,反复地中这个病毒。下了360的专杀,用了windows清理助手,还用了BitDefender的专杀,都没发现病毒,奇了怪。在网上搜了半天,没什么建设性意见,都是说用专杀工具。不过有个人说取消了共享文件夹,给用户名设了密码就好了。我没贡献文件夹啊,密码也有,就是很简单,干脆就把密码改复杂,结果居

2009-09-09 23:10:00 1349

原创 我调的字幕

今天看希区柯克的历劫佳人,又调了一次字幕,想起以前调的几部希区柯克电影的字幕,就上射手网看了一下。呵呵,蝴蝶梦居然有一千多的下载,还是有点自豪哈。就是有一部的字幕文件不见了,不知道是不是以前没传上。下面这个事我调的字幕的链接,想起以前调时间轴那个辛苦哈。O(∩_∩)O哈哈~。http://shooter.cn/search/Sub:%E6%82%A8%E6%89%80%E4%B8%8A%E

2009-09-08 21:35:00 429

原创 sprintf的一点问题

sprintf使用参数 %s 时,是把字符串放到指定的缓冲区,字符串要以“/0”结尾,否则会导致不可预料的行为。如这些: char name[20]; char temp1[5] = "abcde"; memset(name,0,sizeof(name)); sprintf(name,"%s ",temp1);name里面可能是“abcde”,

2009-09-08 18:41:00 835

原创 cygwin的cygintl-3.dll问题

我不得不说,这问题很奇怪。 昨天在cygwin下进行交叉编译,用的交叉编译器是gcc3.4.6-ppc-eabi。把gcc3.4.6-ppc-eabi拷到cygwin目录下后,修改cygwin里面/etc/profile,在最后增加PATH=/cygdrive/d/cygwin/gcc3.4.4-ppc-eabi/bin:.:$PATH 和 export PATH 两句话(即修改环境变量),然后

2009-09-08 18:16:00 3017

转载 整数溢出

gettimeofday()引出的问题。因为用long存秒数最多能存68年,如果超过这个时间段就会产生溢出。比如,int i = INT_MAX,i++,则i就会溢出。这时i的二进制值就是1000……0,因为负数使用补码表示,1000……0取反(不包括符号位)再加1,i的值实际上就是负的INT_MAX+1。下面转的这篇文章对整数溢出讲得比较清楚。======================

2009-09-07 09:27:00 2244

转载 C/C++中的日期和时间

我的总结:这篇对时间的描述应该是比较完整了。要注意的是clock()函数来求一段时间的话,只能在一个进程内部求,因为它是以进程起始点为标准的。gettimeofday()可以用在多个进程间,因为它是以1970年1月1日为标准的。但是gettimeofday有个问题就是它存时间的数据字段是个long型,在32位系统里面,最多可以表示68年的一个时间间隔,也就是说如果在2039年以后用这个函数,得到的

2009-09-04 17:27:00 701

转载 #error指令

#error指令 TAG:预编译和宏定义,ANSI C,#errorTEXT:语法格式如下:#error token-sequence其主要的作用是在编译的时候输出编译错误信息token-sequence,从方便程序员检查程序中出现的错误。例如下面的程序#include "stdio.h"int main(int argc, char

2009-09-04 10:01:00 908

转载 运算符#和##

运算符#和## TAG:预编译和宏定义,运算符#和##TEXT:在ANSI C中为预编译指令定义了两个运算符——#和##。# 的作用是实现文本替换,例如#define HI(x) printf("Hi,"#x"/n");void main(){HI(John);}程序的运行结果Hi,John在预编译处理的时候, "#x"的作用是将x替换为所代

2009-09-04 09:58:00 565

原创 删除日志文件后重启日志

今天调试程序时,看日志文件实在东西太多,就一口气把它删了(/var/log/messages)。然后再新建一个相同的文件,没想到,这下死都没有日志写进来,郁闷了。在网上找了一些,解决了:/etc/init.d/syslog reload ,重启日志服务就可以了。

2009-09-02 18:59:00 796

原创 结构体零长度数组的意义

 在一些 C 语言编写的代码中,有时可以看到如下定义的结构: typedef struct user_def{    char * name;    int length;    char bytes[0];} user_def_t;这个 bytes 是什么意思?我们知道 0 == sizeof(bytes),那么 bytes 仅仅是为了定义结构的尾地址吗?不是的。

2009-09-02 13:43:00 3014

转载 [精彩] char[0], sizeof和struct padding

 我想举一个自己最近在项目中犯的错误来说明要踏踏实实做人,不要做装B青年 :( 在代码中,我需要在一个library和一个daemon之间通过socket传送数据包,包的格式定义如下(为了简化,我就用最简单的数据类型举例):typedef struct {        int head;        int size; //指明整个包的长度        char reply;

2009-09-02 10:38:00 1342

原创 sizeof(struct)内存分配分析

 请看下面的结构:   struct MyStruct   {     double dda1;    char dda;       int type;   };对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求:sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int

2009-09-02 10:01:00 852

原创 gcc 不支持 //注释的解决

 这段时间用slickedit写代码(windows平台下,装了Cygwin),编译器用的gcc,但是有个问题就是用 "//" 写注释的时候,编译的时候有错:error: parse error before / token,extra tokens at end of #endif directive。今天在网上搜到一点蛛丝马迹,在slickedit里build菜单,gnu c option

2009-09-01 11:15:00 3780

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除