printf 与 C 中的制表符对齐

Cfo*_*ux 2 c printf

我的代码中有以下打印内容

printf("%-*s %s", 20, "string1", "string2");
printf("%-*s %s", 20, "\tstring3", "string4");
Run Code Online (Sandbox Code Playgroud)

我希望它打印以下内容:

string1              string2
    string3          string4
Run Code Online (Sandbox Code Playgroud)

但在某些操作系统(例如 Ubuntu 16)上我得到以下信息

string1              string2
    string3              string4
Run Code Online (Sandbox Code Playgroud)

我到处搜索,找不到解决这个问题的方法,我认为%-*s应该解决我的对齐问题,但它没有

hyd*_*yde 5

TAB 仍然是 1 个字符。它被打印为 1 个字符。然后终端就可以用它做任何它想做的事情。

这意味着,printf("%-20s", "\tstring3");将打印 1 个 TAB 字符、7 个普通字符,然后打印 12 个空格,得到 20。

你需要重新思考你想做什么。一种方法是创建一个函数,该函数接收带有制表符的字符串,并返回一个已扩展为空格的字符串。如果 TAB 始终位于字符串的开头,那么您可以将 TAB 替换为 8 个(或您需要的任意数量)空格。如果您需要实际的制表符停止位,则需要更多的逻辑来将它们扩展为适当数量的空格。