gpt4 book ai didi

当提供从网络接收到的字符串时,Curses printw() 将仅打印换行符

转载 作者:行者123 更新时间:2023-11-30 17:47:10 28 4
gpt4 key购买 nike

我目前正在开发一个线程网络应用程序(实际上是两个,但具有共同的基础),并使用 nCurses 作为接口(interface)。

问题是,目前我正在尝试启动两个线程; GUI 线程正在监听键盘触发,并且当键盘触发时,将在内存中构建一条消息。当按下回车键时,它会被传递到服务器线程,服务器线程会通过网络传递它。

服务器线程监听连接。当它接收到一个时,就进入循环;查看连接中是否有任何数据,如果有,则将其发送到 GUI 线程,然后由 GUI 线程显示它。然后,从 GUI 检查任何内容,通过网络发送,等等。

问题是,我可以很好地接收消息(到目前为止一直在使用 Telnet 进行测试...),并且消息可以很好地到达 GUI 线程。 printf 会很好地显示它(但是混合 printf 和 nCurses 感觉很脏),但 printw 只会为我带来一个换行符以解决我的麻烦。当我单独访问角色时,一切似乎都正常。

char* messageRcv;
messageRcv = stream_rcv_nblock(stream);

if(messageRcv != NULL) {
if(messageRcv[0] != '\xFF') {
printw("%s", messageRcv);
refresh();
}

free(messageRcv);
}

理论上,这是应该显示消息的代码。根据记录,0xFF 目前充当“连接已关闭”代码。又快又脏,但现在还处于早期阶段,所以我不在乎。

任何有关此问题的帮助将不胜感激,因为我什么也没有。谢谢。

编辑: printw() 使用格式字符串“%s”,但错误仍然发生。

最佳答案

问题很可能是您的字符串在每行末尾包含 CR-LF 序列。

addch(由 printw 使用)被要求输出换行符时,它首先执行 clrtoeol,然后推进光标到下一行。由于 CR 导致光标位置重置到左边距,因此 NL 输出的 clrtoeol 会删除刚刚打印的行中的所有字符。

据我所知,除了从输出中删除 CR 之外,没有其他方法可以阻止这种行为。

关于当提供从网络接收到的字符串时,Curses printw() 将仅打印换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19031282/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com