我正在 Linux 中构建服务器和客户端(聊天室),我想在客户端回显的字符缓冲区中为一个词(用户名)着色。下面是当用户进入聊天时缓冲区是如何回显的:
strncpy(clients[clientIndex].username, buf, BUF_SIZE); // copy buffer to username
bzero(buf, BUF_SIZE); // zero out buffer
strncpy(buf, "User added to chat.", BUF_SIZE); // new user added
strncpy(buf, "Welcome, ", 9); // add welcome message to buffer
// concatenate so that the buffer reads "Welcome, [username]"
strncat(buf, clients[clientIndex].username, BUF_SIZE - 9);
我知道的给文本着色的唯一方法是:
#define KMAG "\x1B[35m"
.
.
.
printf(KMAG "Welcome\n");
但显然我没有使用 printf(),因为服务器和客户端必须发送和接收这些消息。我需要一种方法来为缓冲区中的一个单词着色。我想象的东西可能看起来像这样:
strcpy(clients[clientIndex].username, KMAG);
我可以为字符本身分配颜色,而不仅仅是改变它的打印方式。 是否存在这种给文本着色的方法?
编辑:我的错误。我正在使用 printf...只是非常不确定如何在我正在打印的缓冲区中的某些字符上实现颜色
这是代码在客户端中的打印方式:
void recvMessageFromServer() {
while (1) {
/* print the server's reply */
n = recvfrom(sockfd, buf, BUFSIZE, 0, (struct sockaddr *) &serveraddr,
&serverlen);
if (n < 0)
error("ERROR in recvfrom");
printf("%s\n", buf);
}
}
最佳答案
服务器“可以”通过以下方式设置颜色:
strcat( buf, '%s", "\x1B[35m" );
strncat( buf, "clients[clientIndex].username, 9);
strcat( buf, "%s", "\x1b[30m" );
这会将“用户名”(限制为 9 个字符)文本设置为 magneta,然后将后面的任何文本设置为黑色
关于C - 控制台窗口中的彩色字符 (Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43791391/