程序在 printf() 上中断

Program is breaking on printf()

在第一个 printf() 之后程序中断,甚至没有到达下一个 printf()

void UART_rx(void) {
    char rx_buffer[256];
    int rx_length = read(uart_filestream, (void*) rx_buffer, sizeof(rx_buffer));

    if(rx_length > 0) {
        printf("%s", rx_buffer);
        printf(" ok");
        rx_buffer[12] = '[=10=]';
        printf(" ok");
        char str_id[4];
        char *start;
        start = strchr(rx_buffer, ',');
        start++;
        strcpy(str_id,start);
        int id;
        id = atoi(str_id);
        printf("Liczba typu int: %d, oraz jako ciag znakow: %s\n", id, str_id);
    }
}

问题可能出在哪里?

read 调用可能错过了将空字节附加到 rx_buffer,这是 printf%s 格式化程序所要求的。

手动添加1:

printf("%*.*s\n", rx_length, rx_length, rx_buffer);

1 感谢@JonathanLeffler!

注意 这需要 read 只读 sizeof(rx_buffer) - 1 以防止缓冲区溢出,如果 read 真的读取 256字节,因为 rx_length == 256 和写入 rx_buffer[256] 是未定义的行为。


备注:

  • readreturns一个ssize_t。相应地声明 rx_length,因为 int 可能无法保存值,而这些值非常适合 ssize_t