24、printf跨平台,数据类型与输出类型要匹配

简介: 1、使用printf应当说是类型不安全的。所以才引入了C++的流输入输出。 比如: #include "stdint.h" #include "iostream" using namespace std; int main() {     in...

1、使用printf应当说是类型不安全的。所以才引入了C++的流输入输出。

比如:

#include "stdint.h"

#include "iostream"

using namespace std;

int main()

{

    int64_t a = 1;

    int b = 2;

    uint32_t uin = 1;

    printf("%p %p\n", &a, &b);

    printf("%llu\n", uin);

    cout << a << " "<< b << endl;

    printf("%d %d\n", a, b);

    return 0;

}

输出是:

0xbfd831e0 0xbfd831dc

13823853877176303617  //error

1 2

1 0  //error

可以看到,uint32_t类型,我们用lld时,出现了错误,因为printf是根据类型,从起始地址偏移类型个字节进行读取数据。

使用C++中的流便不会出现这个问题。在跨平台中,应当引起注意。

2、类型与字节数【3

%ld:long int, 32位平台4 bytes

%lld: long long int, 32位平台8 bytes

%lf:double

**************

typedef signed char       int8_t

typedef short int         int16_t;

typedef int             int32_t;

# if __WORDSIZE == 64

typedef long int         int64_t;

# else

__extension__

typedef long long int     int64_t;

#endif

参考:

1http://www.vimer.cn/2011/08/printf-%E5%B0%8F%E4%BB%A3%E7%A0%81%EF%BC%8C%E5%A4%A7%E9%97%AE%E9%A2%98.html

2http://www.cppblog.com/Solstice/archive/2010/04/06/111788.aspx

3】 类型与字节数

http://blog.sina.com.cn/s/blog_4b9eab320100sdex.html

4printf实现的探究

http://www.cnblogs.com/hnrainll/archive/2011/08/05/2128496.html

目录
相关文章
|
8天前
02-python的基础语法-标识符/运算符/字符串拓展/字符串的拼接/字符串格式化/字符串精度控制/字符串格式化方式2/对表达式进行格式化/练习题/数据输入-input语句
02-python的基础语法-标识符/运算符/字符串拓展/字符串的拼接/字符串格式化/字符串精度控制/字符串格式化方式2/对表达式进行格式化/练习题/数据输入-input语句
|
7天前
|
Python
如何在python中判断一个字符串是否可以转换为数字
如何在python中判断一个字符串是否可以转换为数字
10 1
|
4月前
|
存储 Go
解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍
数据类型是编程中的重要概念。数据类型指定了变量值的大小和类型。Go是静态类型的,这意味着一旦变量类型被定义,它只能存储该类型的数据。
60 0
解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍
|
7月前
|
存储
关于char类型数组的两种输出方法
关于char类型数组的两种输出方法
145 0
|
9月前
学生信息管理系统——出现str2$变量未定义问题(后续/关于数据类型的类型符)
学生信息管理系统——出现str2$变量未定义问题(后续/关于数据类型的类型符)
54 0
|
9月前
|
C语言 Python
ENVI_IDL基础:常用数据类型_创建数组_类型转换_print输出_基本运算_关系运算
ENVI_IDL基础:常用数据类型_创建数组_类型转换_print输出_基本运算_关系运算
301 0
|
10月前
测试字符类型和布尔类型
测试字符类型和布尔类型
37 0
|
C语言 C++
转换符说明使用方法(在printf函数中)
一些常见的转换说明及打印结果: printf()的转换说明修饰符 printf()函数打印数据指令时要与代打印数据的类型相匹配才行。 如%d %c %ld......这些符号叫做转换说明。代表着数据转化成显示的形式。 一些常见的转换说明及打印结果: 转换说明 输出 %d 有符号十进制整数 %c 单个字符 %A 浮点数,十六进制数和p计数法(c99/c11) %a 浮点数,十六进制数和p计数法(c99/c11) %f 浮点数,十进制计数法 %e 浮点数,e计数法 %E 浮点数,e计数法 %i 有符号十进制整数 %o 无符号八进制整数 %p 指针(地址) %s 字符串 %u 无符号十进制整数
98 1
|
XML C语言 数据格式
C基础——使用printf打印各种数据类型的方式(示例)
C基础——使用printf打印各种数据类型的方式(示例)
567 0
C基础——使用printf打印各种数据类型的方式(示例)
|
索引 Python 容器
【Python基础速览1】变量 | 输出和输入 | 数字类型 | 字符串类型(二)
最近得了急性胃肠炎(草),所以咕咕咕了好几天,等过段时间一定好好肝文。这次就发一发前几年学Python时自己记的笔记吧,还是和之前一样,适合用来复习过一遍基础,并不适合从零开始。
139 0
【Python基础速览1】变量 | 输出和输入 | 数字类型 | 字符串类型(二)