彩色读取线与字符串变量的字符串文字组合

时间:2018-01-08 19:31:27

标签: c readline

是否可以将变量lambda放入带有颜色的readline中? GCC debuger给了我这个错误:text_info

" error: expected ‘)’ before 'text'

我知道下面的方式有效,但事实并非如此。

#include <readline/readline.h>

#define CYELLOW "\001\e[0;31m\002"
#define RESET   "\001\e[0m\002"

int main(int argc, char **argv)
{
    char *text_info = "its very simple string";
    readline(CYELLOW text_info RESET);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

您发布的行无效,因为在构建时无法合并:

readline(CYELLOW text_info RESET);

正如@Weaterh Vane在上面的评论中已经提到的,唯一真正的解决方案是在运行时通过sprintf或更好snprintf来构建字符串。

 char aBuffer[100];
 snprintf(aBuffer, sizeof(aBuffer), "%s%s%s", CYELLOW, text_info, RESET);

修改:请注意,上例中的aBuffer可能很小(取决于text_info的长度)。根据您的应用程序,您可以增加100的大小或动态分配缓冲区。

答案 1 :(得分:1)

在工作代码中,这一行

readline(CYELLOW text_info RESET);

是宏扩展到

readline("\001\e[0;31m\002" "simple string" "\001\e[0m\002");

反过来,在字符串文字组合结束后

readline("\001\e[0;31m\002simple string\001\e[0m\002");

包含一个简单的字符串文字。不涉及运算符,但它仍然最终作为函数的单个参数。

与此相反,这一行

readline(CYELLOW text_info RESET);

是宏扩展到

readline("\001\e[0;31m\002" text_info "\001\e[0m\002");

不受字符串文字组合的限制,因此最终会有三个字符串表达式(即不仅仅是文字字符串,一个是非文字字符串,一个指向字符的指针),中间没有任何操作符。

此外,字符串连接没有简单的运算符(字符串文字组合之外的情况)。

因此,为了给出一个字符串参数(&#34;字符串&#34;如同&#34; C兼容的零终止字符序列,可能是数组),你将不得不构造这样一个字符串和然后将其用作函数的单个参数。

正如风向标提出的那样,sprintf()可能就是这样做的工具。