zoukankan      html  css  js  c++  java
  • 使用sprintf打印地址信息

    打印地址信息

    有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32 位的数,你完全可以使用打印无符号整数的%u”把他们打印出来:

    sprintf(s, "%u", &i);

    不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址:

    sprintf(s, "%08X", &i);

    然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的%p”

    sprintf(s, "%p", &i);

    我觉得它实际上就相当于:

    sprintf(s, "%0*x", 2 * sizeof(void *), &i);

    利用sprintf 的返回值

    较少有人注意printf/sprintf 函数的返回值,但有时它却是有用的,spritnf 返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf 调用结束以后,你无须再调用一次strlen 便已经知道了结果字符串的长度。如:

    int len = sprintf(s, "%d", i);

    对于正整数来说,len 便等于整数i 10 进制位数。

    下面的是个完整的例子,产生10 [0, 100)之间的随机数,并将他们打印到一个字符数组s 中,

    以逗号分隔开。

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    int main()

    {

    srand(time(0));

    char s[64];

    int offset = 0;

    for(int i = 0; i < 10; i++)

    {

    offset += sprintf(s + offset, "%d,", rand() % 100);

    }

    s[offset - 1] = '\n';//将最后一个逗号换成换行符。

    printf(s);

    return 0;

    }

    设想当你从数据库中取出一条记录,然后希望把他们的各个字段按照某种规则连接成一个字符串时,就可以使用这种方法,从理论上讲,他应该比不断的strcat 效率高,因为strcat 每次调用都需要先找到最后的那个’’的位置,而在上面给出的例子中,我们每次都利用sprintf 返回值把这个位置直接记下来了。

    原文:

    http://baike.baidu.com/view/1295144.htm

  • 相关阅读:
    微信小程序 使用async await
    CSS currentColor 变量的使用
    wn.run万能命令
    (13)浮动布局(控制盒模型在页面的什么位置 什么是清浮动)
    (0)前端总结(HTML + CSS + JQ)
    (12)页面的布局(浮动布局)
    (11)盒模型
    (10)背景图片操作
    (9)字体操作
    (8)伪类选择器和鼠标悬停动画效果
  • 原文地址:https://www.cnblogs.com/mydomain/p/2772518.html
Copyright © 2011-2022 走看看