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 停止位,则需要更多逻辑来将它们扩展到正确的空格数。
我的代码中打印了以下内容
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 停止位,则需要更多逻辑来将它们扩展到正确的空格数。