sqlite3 的转义

sqlite 关于 string 类型的数据需要转义。

通过查找规则,可以很容易通过switch拼装一个字符串来搞定。 大致规则是,单引号和双引号要变成两个,其他特殊字符为前面加上'/'。 (more…)

fix记录:注意返回值

sqlite3使用sqlite3_exec,原型如下:

int sqlite3_exec(
    sqlite3*,                                  /* An open database */
    const char *sql,                           /* SQL to be evaluated */
    int (*callback)(void*,int,char**,char**),  /* Callback function */
    void *,                                    /* 1st argument to callback */
    char **errmsg                              /* Error msg written here */
);

其中有个参数是callback类型的。查询到的数据放在callback中处理。 (more…)

元素为N字节的数组放到单位为1byte的数组中,以及重新拼装回去

为了网上传输数据,所以数据最好被拆为单位为1byte大小的数组串(unsigned char 类型恰好是这个大小),然后再进行传输,这样才能不会出现自己无法控制的情况(断网谁都控制不了了当然)。 此外,需要约定好字节序 -- 比如本日志使用的是大端(big endian),以及编码。这样拆解和重组才不会错乱。 (more…)

statfs获取硬盘信息

statfs是一个很有用的linux库函数。在它的帮助下,我们可以很容易得到硬盘信息啥的。 以前全是调用command命令,弱爆了。如果用 man 2 statfs 命令可以得到很多其使用方法。本post就简单写个demo表示下存在感 (more…)

implicit declaration of function ‘xxx’

随手几行测试代码,编译居然报了一排warning,仔细查看,都是类似如下格式的:

xxx\xx.c||In function 'xxx':|
xxx\xx.c|14|warning: implicit declaration of function 'memset' [-Wimplicit-function-declaration]|
xxx\xx.c|14|warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]|

(more…)

关于const的两个tip

1. 在输入一个字符串的时候,一般请加上const 修饰

比如 :

int strlen(const char * str);

其中,str字符串在本函数中是不需要进行修改的,所以可以用const修饰 这样,我们引用strlen函数的时候可以这样写:

strlen("abc");

如果没有const,一个warning就会来了 (more…)

error while loading shared libraries的解决方法

错误提示:

./prog: error while loading shared libraries: xxx.so.0:
cannot open shared object file: No such file or directory

这个提示的意思是没有找到xxx.so.0这个文件,那么首先应该确定下,本机是否存在这个.so文件?如果存在,那么我们可以作出判断,xxx.so.0这个动态链接库所在的文件夹不在搜寻范围内. (more…)

三门问题模拟

问题描述: 三门问题也就是“蒙提霍尔问题”,表述如下: 现在有三扇门,两扇门后是山羊,一扇门后是汽车. 参赛者并不知道内里有什么。 参赛者需要在三扇门中挑选一扇,期望是门后有汽车。 主持人知道每扇门后面有什么。 主持人必须开启剩下的其中一扇门,并且必须提供换门的机会。 主持人永远都会挑一扇有山羊的门。 如果参赛者挑了一扇有山羊的门,主持人必须挑另一扇有山羊的门。 如果参赛者挑了一扇有汽车的门,主持人随机在另外两扇门中挑一扇有山羊的门。 参赛者会被问是否保持他的原来选择,还是转而选择剩下的那一道门。 转换选择可以增加参赛者的机会吗? (more…)