我正在使用Arduino 022为Arduino Mini Pro编程 . 我有以下功能:
String join(const String str, ...) {
Serial.println("join");
va_list args;
va_start(args, str);
Serial.println("result init");
String result = "";
for (String strArg = str; strArg != NULL; strArg = va_arg(args, String)) {
Serial.println(result);
result += strArg + ARG_DELIMITER;
}
result = result.substring(0, result.length() - 1);
Serial.println("join end");
return result;
}
当我调用此功能时,程序停止,引脚13中的内置LED亮起 . “join”永远不会打印到串行监视器上 . Arduino上是否不允许使用可变函数?
2 回答
你可以't pass most class types to a variadic function - only POD types (5.2.2 para 7 in the standard); if you do the behaviour is undefined - which could cause the problems you' . 我很确定Arduino String class不是POD,所以这不会起作用 .
你可能最好使用char数组(至少在某些地方),例如
如果这不会在呼叫站点造成太多丑陋,或者可能只为1到N字符串提供重载 .
另外 - String对象是否可以等于NULL?您对
strArg != NULL
的测试看起来很可疑 .当你调用代码时,它看起来像:
要么:
您必须自己提供NULL终止符 - 编译器不会这样做 .
编辑:这假设String是char *的typedef(因为你将它与NULL进行比较),但如果是,那么你的代码还有很多其他问题 . 请说明String的类型 .