程序在 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]
是未定义的行为。
备注:
read
returns一个ssize_t
。相应地声明 rx_length
,因为 int
可能无法保存值,而这些值非常适合 ssize_t
。
在第一个 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]
是未定义的行为。
备注:
read
returns一个ssize_t
。相应地声明rx_length
,因为int
可能无法保存值,而这些值非常适合ssize_t
。