void Uprintf(const char* fmt, ...) { va_list ap; char s[SERIAL_BUFF_SIZE + 76]; char TX[SERIAL_BUFF_SIZE + 76]; va_start(ap, fmt); fflush(stdout); vsnprintf(s, sizeof(s), fmt, ap); va_end(args); memset(TX, 0, sizeof(TX)); strncpy(TX, s, sizeof(TX) - 1); DEV_Serial_DTC_Send_Data(ch,(UC*)TX,strlen(TX)); } ,第一条void Uprintf(const char* fmt, ...)发完后, 紧接着调用第二条void Uprintf(const char* fmt, ...),,第二条就会漏掉,怎么改?
时间: 2024-03-26 16:38:03 浏览: 334
这个问题可能是因为第二条 `Uprintf` 函数的调用时机不正确,导致第二条函数的输出被覆盖了。你可以尝试将第一条 `Uprintf` 函数中的 `fflush(stdout);` 移动到第二条函数的调用之前,这样可以确保第一条函数的输出先被刷新到标准输出流。修改后的代码如下:
```c
void Uprintf(const char* fmt, ...) {
va_list ap;
char s[SERIAL_BUFF_SIZE + 76];
char TX[SERIAL_BUFF_SIZE + 76];
va_start(ap, fmt);
vsnprintf(s, sizeof(s), fmt, ap);
va_end(args);
memset(TX, 0, sizeof(TX));
strncpy(TX, s, sizeof(TX) - 1);
DEV_Serial_DTC_Send_Data(ch, (UC*)TX, strlen(TX));
fflush(stdout); // 将输出刷新到标准输出流
}
// 第二条 Uprintf 函数调用之前需要先刷新标准输出流
fflush(stdout);
Uprintf("Hello, world!\n");
```
这样应该可以确保第二条函数的输出不会被覆盖。注意,如果你在多个线程中调用这个函数,可能需要使用线程同步机制来保证输出的顺序。
阅读全文