carl's profileCarlcorvette`s spacePhotosBlogLists Tools Help

Blog


    March 21

    一些程序小错误

    第1个问题:
    void swap(int& a,int& b){
        a=a^b;
        b=a^b;
        a=a^b;
    }
    本来一直以为这样写是对的,今天终于发现还是有问题的。
    比如a和b本来就是一个变量时,运行这个函数会把变量清零。(第一句)
    今天在写排序的时候发现的,后来很搓的加了
    if(a==b)
       return;
    不知道有什么优雅的办法。后来看很多书上也都是用声明中间变量的办法解决的。
    可能不用中间变量只是为了好看吧。

    第2个问题:
    ...
    char * p="1.2.3";
    char * first=strtok(p,".");
    ...

    这个会导致运行时错误,说某内存地址不能写。
    后来才发现C有个叫常量区的地方,而这样定义的P就是指向那个常量区的。
    而strtok的原理是把字符窜中delims里面的内容替换为'\0'
    改成char p[]="1,2,3";就好了。这样P和String都是在栈上的,连free都省掉了。

    PS:如果要开在栈上,可以写
    char * p=(char*)malloc(6);
    strcpy(p,"1.2.3");

    C/C++基本是自学的,现在感觉C都搞不定了。
    写JAVA写多了人就不行了啊。


    March 14

    移植fcitx

    经过3天努力,这个基于xlib的程序裁到能在VS2005 下编译连接了
    想起一起学长的告诫:“裁代码要从makefile看起”
    不过在make 前还要configure ,无耐fcitx的configure有7K行,也不知道都写了干什么用的。。。
     
    fcitx的词库在源码包里是用.txt存的,可是在代码里读的都是.mb的文件。
    卡了很久才想到去linux下去make一下工程,原来make一下.txt就成了.mb的二进制文件了。
    还是第一次发现make有这个功能。好神奇啊~~~
     
    读代码的话有source insight觉得已经足够强大了。
    不过要是去裁代码就会想要软件能做到输入一个源码包,输出所有函数的调用关系树。
    就好了。。。。
    或者可以自己写一个,凭现在的认识,好像还是有可能的写出来的。
     
    话说微软的VC名字看上去是写C的,可是怎么连个.c的文件都不能编译呢?
    只能都当C++编译了,这在性能上还是有差别的。
     
    以前一直觉得VS就是一个几百MB的大记事本,今天好好用了才发现它的DEBUG比eclipse CDT要强的多。
    而且VS的编译器的错误提示信息也很准确,以前minGW一个错,后面句句都错了。
    看来VS 卖这价钱还是有道理的。
     
    March 12

    重回space

    觉得微软在web2.0上始终是苦苦追赶的。
    今天装了msn9.0,上space发现space已经和winodws live 整合起来了。
    虽然晚了点,至少整个这一套东西是朝着SNS靠拢吧。
    不过话说回来,ms至少在个人领域是最大的公司吧。把东西托管在space上面的风险还是很小的。

    the big swtich 上面说web2.0造就了网上的血汗工厂。
    既然现在我也在web上贡献内容(虽然是rubbish),也算是当了免费工人了吧。

    大学已经过了差不多了。Some say 读大学= 读书|社团|女朋友
    现在看来好像一个也没有沾上,倒是对大一大二自以为是的我感到奇怪。

    所以打算在从现在开始记录点什么,这样以后还可以回来看看那时的自己为什么会有这样那样的心态。

    这个月估计都要话在研究fcitx上了,看代码越看越觉得如果现在拿去编译肯定一排错。
    不过要说移植到moblin的话,也没有更方便的了。
    觉得很佩服fcitx的作者,这么好的一个输入法是一个人完成的。而且能坚持到3.4版。
    不过因为是一个人写的,所以一点注释也没有,估计作者本来想:大家都不帮忙的话只要我一个人看懂就行了。

    上周把奥威尔的<<1984>>看掉了。在故事结束前,里面那句“我们将在没有黑暗的地方见面”我一直理解反了。
    估计作者也是这么安排剧情的吧,不然只能说我。。。。