如果参数是单个字符或字符串,如何检查 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}, ...
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}, ...