c - 自动打印终端转义的自定义功能不接受多个参数
问题描述
#include <stdio.h>
int print_cool_characters(char *printable_message) {
printf("\033[36m Cyan text: %s \033[39m \n", printable_message);
}
int main(void) {
print_cool_characters("This is very cool! Also, here's a number: %i.", 123);
}
调用 GCC... 错误:函数参数过多。
解决方案
您必须使用可变参数:
这里有一个小例子:https
://www.eskimo.com/~scs/cclass/int/sx11b.html
和一个相关的问题:在 C 中使用可变参数的例子
你可能正在尝试编写类似 printf 的函数:如何编写自定义 printf?, http://www.firmcodes.com/write-printf-function-c/
我用 %i 检测器重新编写了函数
#include <stdio.h>
#include <stdarg.h>
void print_cool_characters(char *c, ...) {
printf("\033[36mCyan text: ");
char *s;
va_list lst;
va_start(lst, c);
while(*c != '\0') {
if(*c != '%') {
putchar(*c);
c++;
continue;
}
c++;
switch(*c) {
case 'i': printf("%d", va_arg(lst, int)); break;
}
c++;
}
printf("\033[39m\n");
}
int main(void) {
print_cool_characters("This is very cool! Also, here's a number: %i.", 123);
}
推荐阅读
- c# - 如何配置 xUnit 测试以使用 NLog?
- qradar - 使用 API 的 IBM QRadar 搜索事件
- api - 如何从 API 发送自适应卡片
- javascript - vue.esm.js:649 [Vue 警告]:nextTick 中的错误:“TypeError:无法将对象转换为原始值”vue
- javascript - “请求”类型上不存在属性“授权”
- c# - Angular 9 / Typescript 在多个键上合并多个对象数组
- postgresql - 全文搜索:在任意数组项中查找节点值
- matlab - 如何获得两个二维矩阵的元素对之间的最大值?
- c++ - 如何使用 MySQL X Dev API ping
- python - 如何输入二维数组