C - 控制台窗口中的彩色字符 (Linux)

标签 c linux colors character

我正在 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/

相关文章:

c++ - C/C++ : Force Bit Field Order and Alignment

java - 如何在 JAR 完成执行时终止 Java 进程

我们可以在一台 PC 上构建 linux 内核并将其安装在另一台 PC 上吗?

colors - 使用 "difference"在颜色之间进行度量(感知模型)

c++ - 有更好的方法来实现这个

c - 在 C 中实现严格的下界

c++ - 使用 socketpair 时 SO_SNDBUF 的行为

linux - pthread_cond_signal 死锁

java - 以编程方式找到补色?

python - 如何使 tkinter 标签背景透明?