程序在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] = '\0';
        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,这是的%s格式化程序所必需printf

通过手动添加来做到这一点1

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

1感谢@JonathanLeffler!

请注意如果确实要读取字节,则这需要read只读sizeof(rx_buffer) - 1以防止缓冲区溢出,因为那样然后写入是未定义的行为。read256rx_length == 256rx_buffer[256]


笔记:

  • read返回ssize_t因此声明rx_length,因为int可能无法保存ssize_t非常合适的值

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从代码中断程序中删除printf语句

来自分类Dev

程序挂在printf上或跳过printf

来自分类Dev

应用程序在CCriticalSection :: Lock上中断

来自分类Dev

多线程程序上的 printf 函数

来自分类Dev

在 $('#x').change 或 angularfire $add 上使用“Ng-If”“中断”程序

来自分类Dev

如何中断python程序?

来自分类Dev

浮点中断程序

来自分类Dev

bash防止printf中断另一个printf

来自分类Dev

Android上的textview中断

来自分类Dev

Android上的textview中断

来自分类Dev

为什么IE上的多个className声明会中断应用程序?

来自分类Dev

在“尝试/捕获”内部,Visual Studio在未处理的异常上中断并终止了应用程序

来自分类Dev

引导程序小屏幕上的两列中的中断列表项

来自分类Dev

在android 4.4.2版上运行时,应用程序中断,抛出错误:[ng:areq]

来自分类Dev

在“尝试/捕获”内部,Visual Studio在未处理的异常上中断并终止了应用程序

来自分类Dev

为什么IE上的多个className声明会中断应用程序?

来自分类Dev

透明表单上的鼠标单击事件,而不会中断后台应用程序上的事件

来自分类Dev

在C程序中禁用中断

来自分类Dev

期望-中断程序-Ctrl + C

来自分类Dev

引导程序div中断行

来自分类Dev

我有程序中断的问题

来自分类Dev

程序关闭时中断的循环

来自分类Dev

线程事件的中断处理程序

来自分类Dev

追加数组中断程序

来自分类Dev

引导程序div中断线

来自分类Dev

用循环中断程序

来自分类Dev

程序关闭时中断的循环

来自分类Dev

在Mac上找到-printf(-printf未知选项)

来自分类Dev

在AVR上启用外部中断