为什么我在 C 中输出的字符串不正确?

Why is my output of strings in C not correct?

我正在尝试在我的程序中使用 uart_poll_out 而不是 printk,在使用 printk 之前,我能够获得我想要的正确输出到我的 uart 控制台。这是代码和正确的输出:

    for (int i = 0; i < sizeof cmd_handles / sizeof cmd_handles[0]; i++)
    {
        printk("%s\t%s\n", cmd_handles[i].cmd, cmd_handles[i].help);
    }
help    Show commands and descriptions
sample  sample function

现在我必须使用 uart_poll_out 并且我的输出一团糟。我不知道如何修复 it/what 是错误的。这是我的代码和(不正确的)输出。我希望输出看起来与上面相同。

    for (int i = 0; i < sizeof cmd_handles / sizeof cmd_handles[0]; i++)
    {
        u8_t tempbuff[1];
        u8_t buf[sizeof(cmd_handles[i].cmd) + sizeof(cmd_handles[i].help) + 5]; // the 5 is arbitrary
        sprintf(buf, "%s\t%s\n", cmd_handles[i].cmd, cmd_handles[i].help);
        for (int i = 0; i < sizeof(buf); i++)
        {
            uart_poll_out(comm_uart, buf[i]);
        }
    }
help    Show comsample  sample

这是cmd_handles:

const cli_cmd_handle_t cmd_handles[] =
{
    {.cmd = "help", .help = "Show commands and descriptions", .handler = cli_help_handler},
    {.cmd = "sample", .help = "sample function", .handler = sample_function},
};

有谁知道如何解决这个问题?谢谢:)

编辑:cli_cmd_handle_t 的定义:

{
    const char *cmd;
    const char *help;
    CliCmdHandler handler;
} cli_cmd_handle_t;```

感谢@WeatherVane 的帮助。我不得不使用 strlen() 而不是 sizeof() 来获得正确的输出。