如果参数是单个字符或字符串,如何检查 C?

How to check in C, if an argument is a single character or a string of characters?

let 假设我想创建一个可变参数函数,它的第一个参数是多个参数,其他参数是字符串。

当我用字符串类型的参数调用我的函数时,一切都很好,因为函数需要这种类型的数据,但是当我用单个字符调用它时,例如,砰!不好的举动。假设程序有时会收到这样不需要的参数, 我怎样才能防止这种分段错误发生。 我写了这些代码作为例子:

#include <stdio.h>
#include <stdarg.h>
/* my variadic function to print strings arguments */
void args_printer(unsigned int args_number, ...)
{
    unsigned int index;
    char *arg_string;
    va_list arg_ptr;
    
    va_start(arg_ptr, args_number);
    for (index = 0; index < args_number; index++)
    {       
        arg_string = (char *)va_arg(arg_ptr, char *);
        if (arg_string != NULL)
            printf("%s ", arg_string);
        else    
            printf("Wrong data!\n");
    }        
    va_end(arg_ptr);
    
}

int main(void) {
    char *message = "Message : ";
    /*args_printer is working fine with correct data and NULL argument */
  args_printer(5, message, NULL, "La vie", " appartient", " au courageux!");
  
  /* arg_printer is having a segmentation fault once I enter this 'm' or a number */
  args_printer(4, 'm', "La vie", " appartient", " au courageux!");
    return 0;
}

How can I prevent this segmentation fault to happen.

错误检查:no-such-luck 使用 f(...) 函数。


通常只将 m 编码为 string 而不是 char:

// args_printer(4, 'm', ...
args_printer(4, "m", ...

动态形成 字符串 的替代方法:

char ch = 'm';
...
// args_printer(4, ch, ...
args_printer(4, (char[2]){ch}, ...