printf() 的语法格式为:

    1. %[parameter][flags][width][.precision][length]type

    %zu 对照过来,z 属于 length 字段,u 属于 type 字段。

    该表达式用来表明输出格式是长度型(size_t)的无符号整型值。其中 size_t 在不同的位数操作系统中定义是不同的:

    1. typedef unsigned int size_t;typedef unsigned long size_t;

    因此在程序设计的时候,如果参数是 size_t 或者 ssize_t,在进行格式化输入或输出的时候务必使用 ‘z’ 修饰符,以防止显示异常。

    常见的 %d、%x 等表示的是整型值,最多表示 4 个字节,而在 64 位系统中,数据有可能需要更多的字节表示,所有用 size_t 定义,就可以跨系统使用,不用担心溢出问题。对应的格式化显示的时候,也就不存在这个问题了。明白了这点,就可以理解’z’ 和 ‘l’ 等效了。‘z’ 只控制长度,具体的是有符号还是无符号,还是由后面的类型决定。
    https://blog.csdn.net/linuxweiyh/article/details/112978257?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.highlightwordscore&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.highlightwordscore