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

时间:2017-05-04 19:33:34

标签: 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);
    }
}

1 个答案:

答案 0 :(得分:0)

服务器'可以'设置颜色:

strcat( buf, '%s", "\x1B[35m" ); 
strncat( buf, "clients[clientIndex].username, 9); 
strcat( buf, "%s", "\x1b[30m" ); 

将“用户名”(限制为9个字符)文本设置为“磁体”,然后将以下任何文本设置为黑色