我正在重新创建unix shell命令,目前正在执行ls。我必须模拟ls-l,它显示权限、文件大小等。如果本地ls-l格式正确,那么每一列都保持如下对齐:
-rw-r--r-- 1 matt matt 1474560 Apr 11 14:54 diskimage
drwxr-xr-x 2 matt matt 4096 Mar 25 15:31 Example
-rwxr-xr-x 1 matt matt 26375 Apr 12 14:24 final
-rwxr-xr-x 1 matt matt 75 Apr 11 14:39 log.sh
现在,我的ls版本做了几乎相同的事情,只是当printf()函数中使用不同的值时,列不会排成一行,如下所示:
drwxr-xr-x 0 1024 Dec 03 14:11 .
drwxr-xr-x 0 1024 Dec 03 14:11 ..
drwxr-xr-x 0 1024 Dec 03 13:57 Z
drwxr-xr-x 0 1024 Dec 03 14:11 X
drwxr-xr-x 0 1024 Dec 03 13:56 Y
-rw-r--r-- 0 334632 Dec 10 08:39 big
如您所见,最后一个条目没有对齐,因为“大小”列比其他列大如何告诉printf函数以带自动对齐列的格式化方式打印?
最佳答案
以下是方法:
printf("%8d", 334632);
d
转换说明符之前的数字告诉printf()
用空白填充打印的数字,以便它占用(至少)例如屏幕上的8个字符你可以在那里写任何整数案例的完整格式字符串可能如下:"%9s\t%4d\t%8d\t%16s\n"
如果需要可变填充量:
printf("%*d\n", max_field_width, 42);