C应用集锦

1. offsetof

#include <stddef.h>

size_t offsetof(type, member);

The macro offsetof() returns the offset of the field member from the start of the structure type.

2. float和int转换

最简单的方法是采用union。

    float ff = 123456.0;
    union{int i; float f;} conv;
    conv.f = ff;
    aa[0] = (unsigned short)conv.i;
    aa[1] = (unsigned short)(conv.i >> 16);
    printf("%X, %X, %X\n", conv.i, aa[0], aa[1]);

3. 字符串拼接 

#define VERSION_DESC(name, author, date, extra) #name"_"#author"_v"#date"_"#extra

4. 去除目录文件前面的目录

#include <stdio.h>
#include <string.h>

#define DIR_FILE    "/tmp/xxx/test"
int main()
{
    char *file;

    if(strrchr(DIR_FILE, '/'))
        file = strrchr(DIR_FILE, '/') + 1;
    
    printf("dir_file-> file [%s]\n", file);

    if(strrchr(file, '/'))
        file = strrchr(DIR_FILE, '/') + 1;
    
    printf("file-> file [%s]\n", file);

    return 0;
}

5. printf %.*s 

格式字符串中小数点.后“*”表示输出位数,具体的数据来自参数表;小数点.前添加*,表示输出的字符所占位宽,具体数据来自参数表。

printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个“*”代替那个常量,然后在后面参数列表中提供变量给“*”。

#include <stdio.h>

int main()
{
    printf("%.*s\n", 4, "Hello world");
    printf("%*.*s\n", 7, 4, "Hello world");

    return 0;
}

$ gcc printf.c -Wall -o test
$ ./test
Hell
   Hell

参考:printf "%.*s"

 

posted @ 2016-11-07 22:22  yuxi_o  阅读(202)  评论(0编辑  收藏  举报