是否可以将变量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;
}
答案 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()
可能就是这样做的工具。