文章目录

  • size_t
  • ssize_t和size_t比较
  • size_t 和 int 比较

size_t

  • size_t是一些C/C++标准在stddef.h中定义的,size_t类型表示C中任何对象所能达到的最大长度,它是无符号整数。
  • 它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。size_t在32位系统上定义为 unsigned int,也就是32位无符号整型。在64位系统上定义为 unsigned long ,也就是64位无符号整形。
  • size_t 的目的是提供一种可移植的方法来声明与系统中可寻址的内存区域一致的长度。
  • size_t 在数组下标和内存管理函数之类的地方广泛使用。例如,size_t 用做sizeof 操作符的返回值类型,同时也是很多函数的参数类型,包括malloc 和strlen。
  • 在声明诸如字符数或者数组索引这样的长度变量时用size_t是好的做法。它经常用于循环计数器、数组索引,有时候还用在指针算术运算上。size_t的声明是实现相关的。它出现在一个或多个标准头文件中,比如stdio.h 和stblib.h,典型的定义如下:
#ifndef __SIZE_T
#define __SIZE_T
typedef unsigned int size_t;
#endif

define 指令确保它只被定义一次。实际的长度取决于实现。通常在32 位系统上它的长度是32 位,而在64 位系统上则是64 位。一般来说,size_t 可能的最大值是SIZE_MAX。

打印size_t 类型的值时要小心。这是无符号值,如果选错格式说明符,可能会得到不可靠的结果。推荐的格式说明符是%zu。不过,某些情况下不能用这个说明符, 作为替代,可以考虑%u 或%lu。下面这个例子将一个变量定义为size_t,然后用两种不同的格式说明符来打印:

size_t sizet = -5;
printf("%d\n",sizet);
printf("%zu\n",sizet);

因为size_t 本来是用于表示正整数的,如果用来表示负数就会出问题。如果为其赋一个负数,然后用%d 和%zu 格式说明符打印,就得到如下结果:

-5
4294967291

%d 把size_t 当做有符号整数,它打印出-5 因为变量中存放的就是-5。%zu 把size_t 当做无符号整数。当-5 被解析为有符号数时,高位置为1,表示这个数是负数。当它被解析为无符号数时,高位的1 被当做2 的乘幂。所以在用%zu 格式说明符时才会看到那个大整数。

sizet = 5;
printf("%d\n",sizet); // 显示5
printf("%zu\n",sizet); // 显示5

因为size_t 是无符号的,一定要给这种类型的变量赋正数 。

ssize_t和size_t比较

ssize_t 和size_t类似,但必需是signed(表示 signed size_t类型), 用来表示可以被执行读写操作的数据块的大小。

size_t 和 int 比较

  • size_t在32位架构中定义为:typedef unsigned int size_t
  • size_t在64位架构中被定义为:typedef unsigned long size_t
  • size_t是无符号的,并且是平台无关的,表示0-MAXINT的范围;int为是有符号的;
    int在不同架构上都是4字节,size_t在32位和64位架构上分别是4字节和8字节,在不同架构上进行编译时需要注意这个问题。
  • ssize_t是有符号整型,在32位机器上等同与int,在64位机器上等同与 long int.

本文所参考的博客链接

C++ size_t相关推荐

  1. size_t和int区别

    size_t和int       size_t是一些C/C++标准在stddef.h中定义的.这个类型足以用来表示对象的大小.size_t的真实类型与操作系统有关. 在32位架构中被普遍定义为: ty ...

  2. size_t与ssize_t

    size_t与ssize_t 为了增强程序的可移植性,便有了size_t,它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样. l          在32位系统上定义为un ...

  3. C++ size_t 与 size_type区别

    [c++]size_t 和 size_type的区别 为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned 1. size_t是全局 ...

  4. unsigned int vs. size_t

    我注意到现代C和C ++代码似乎在任何地方使用size_t而不是int / unsigned int - 从C字符串函数的参数到STL. 我很好奇这个原因及其带来的好处. #1楼 size_t类型是无 ...

  5. C 语言编程 — size_t 的意义与作用

    目录 文章目录 目录 size_t 的作用 size_t 的作用 在 C 语言程序中使用 size_t(size_type)可以提高代码的可移植性.有效性.可读性.实际上,在 K&D C 中并 ...

  6. linux c size_t ssize_t 简介

    总结: 首先,我非常肯定以及确定的告诉你ssize_t是有符号整型,在32位机器上等同与int,在64位机器上等同与long int,有没有注意到,它和long数据类型有啥区别?其实就是一样的.siz ...

  7. 可变参数中size_t遇见的问题

    在修改php扩展Trie时,出现了一个小bug PHP_FUNCTION(trie_filter_load) {Trie *trie;char *path;int path_len;if (zend_ ...

  8. linux中的size_t和ssize_t区别

    一:区别 (1)作用不同 size_t 反映内存中对象的大小(以字节为单位) ssize_t 供返回字节计数或错误提示的函数使用. (2)类型不同 size_t 的定义在: /usr/include/ ...

  9. c语言 sizeof size_t,C/C++中的sizeof运算符和size_t类型的详解

    sizeof的作用 sizeof是c的运算符之一,用于获取操作数被分配的内存空间,以字节单位表示. 这里指的操作数,可以是变量,也可以是数据类型,如int,float等.所以就可以通过它来获取本地c库 ...

  10. 为什么ubuntu64位下C语言for循环不能超过2147483647次?(size_t )

    文章目录 背景 原因 解决办法 背景 2147483647刚好是2^32/2-1,但是不知道为什么循环次数不能超过这个次数 代码: #include <stdio.h>int main() ...

最新文章

  1. 数据结构——算法之(010)( 字符串的左旋转操作)
  2. 1024 Palindromic Number
  3. [第11天]mySQL简单介绍
  4. stm32 micropython vscode_在vscode里基于Pymakr插件进行esp32的micropython开发
  5. 最长公共子字符串(动态规划)
  6. Error occurred while trying to proxy request
  7. qt4.7 mysql 6.3 版本_详解Qt 4.7编译和访问Mysql驱动
  8. 堆结构导致数据文件不能收缩
  9. 探究 Linux 内核 dts 设备树定义文件
  10. 20. Django进阶:生成csv文件
  11. 北理乐学c语言数字菱形,打印数字菱形,急啊,帮帮小女子啊。。。
  12. oppo android版本升级失败,oppo怎么刷机以及刷机失败的原因
  13. 软件_可用rtmp直播地址20200517
  14. 微信小程序实现当前页面多个视频文件只能播放一个视频,其他视频暂停,点击当前暂停当前
  15. httpclient中 RequestEntity和RequestBody区别
  16. NVIDIA TAO 工具包 (TAO Toolkit) 的部署和应用【LDR、LPR】
  17. 像素排列 p(Pentile)排列 RGB 排列
  18. gocv-go语言调用opencv入门
  19. 华为鸿蒙是安卓9,鸿蒙“翻车”了?网友发现全新的鸿蒙系统居然是安卓9.0,华为骗我们?...
  20. 5年随访显示TNF拮抗剂治疗银屑病关节疗效持久

热门文章

  1. PHP的empty,isset和is_null区别
  2. 网络amp;安全学习:解决eNSP路由器打开命令行界面(CLI)一直输出“###”的问题
  3. window 使用schtasks配置定时任务
  4. MySQL数据库与Python
  5. Spring的控制反转与依赖注入
  6. 左上角到右下角的路径 oj_【机器人路径规划】快速扩展随机树(RRT)算法
  7. 金虎入万家,新春序幕开 vivo S12 Pro定格多城年味儿大片
  8. ie 滚动条样式 宽度 兼容IE8。ie11滚动条宽度
  9. IdaP02: springboot security权限控制篇
  10. 最快引流的10个引流方法