首页 > 解决方案 > 自动打印终端转义的自定义功能不接受多个参数

问题描述

#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... 错误:函数参数过多。

标签: cfunction

解决方案


您必须使用可变参数:
这里有一个小例子: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);
}

推荐阅读