首页 > 解决方案 > 打印字符串末尾不填充 0

问题描述

我正在尝试以"Hello"二进制形式打印字符串。

我让它工作,但是,我希望它在没有填充的情况下打印

所以

  01001000 01100101 01101100 01101100 01101111

代替

  01001000 01100101 01101100 01101100 01101111 00000000

这是我的代码:

char t[] = "Hello";

for (int j = 0; j < sizeof(t); j++)
{
    unsigned char c = t[j];

    for (int i = 7; i >= 0; i--) {
        printf("%d", (c >> i) & 1 ? 1 : 0);
    }

    printf(" ");

}

标签: cbit-manipulationc-strings

解决方案


您可以将循环条件修改为:

for (int j = 0; t[j] != '\0'; j++)
/*              ^^^^^^^^^^^^     */

目前,您循环查找所有字符t[],甚至包括尾随nul字符。使用修改后的条件,您会在看到nul负责尾随零的字符时退出循环。

+---+---+---+---+---+---+
| H | e | l | l | o |\0 |
+---+---+---+---+---+---+
  T   T   T   T   T   F   t[i] != '\0'

sizeof(t) = 6
strlen(t) = 5

推荐阅读