printf 与 C 中的制表符对齐

printf alignment with tabs in C

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

printf("%-*s %s", 20, "string1", "string2");
printf("%-*s %s", 20, "\tstring3", "string4");

我希望它打印以下内容:

string1              string2
    string3          string4

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

string1              string2
    string3              string4

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

TAB还是1个字符。它被打印为 1 个字符。然后由终端来做任何它想做的事。

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

你需要重新考虑你想做什么。一种方法是创建一个函数,该函数接受其中包含制表符的字符串,以及 returns 一个已扩展为空格的字符串。如果 TAB 始终位于字符串的开头,那么您只需将 TAB 替换为 8 个(或您需要的任意多个)空格即可。如果您需要实际的 TAB 停止位,则需要更多逻辑来将它们扩展到正确的空格数。