为什么 Serial.println(<char[]>);返回随机字符?
Why Does Serial.println(<char[]>); Return Random Characters?
我正绞尽脑汁想解决这个问题。对于初学者:*我的包价是9600英镑。*我有一个8大小的数组,所以最大索引是7*我根据时间将数组中的每个字符(位置0,1,3,4,6,7(设置为数字0-9*如果我打印时间,它会完美地显示出来,除非数字在18:00:00以上*MSin1Hr、MSin24Hr等的const longs是全局声明的以下是从MS到字符串的时间代码
char lightOffTime[] = {'0', '0', ':', '0', '0', ':', '0', '0'};
void getTimeStr(char inArr[], unsigned long timeInMS)
{
int num = 0;
char cstr[16];
num = timeInMS / (10 * MSin1Hr); //tens of hours
sprintf(cstr, "%01d", num);
inArr[0] = cstr[0];
num = timeInMS % (10 * MSin1Hr) / MSin1Hr; //remainder
sprintf(cstr, "%01d", num);
inArr[1] = cstr[0];
unsigned long minutesMS = timeInMS % MSin1Hr;
num = minutesMS / (10 * MSin1Minute); //tens of minutes
sprintf(cstr, "%01d", num);
inArr[3] = cstr[0];
num = minutesMS % (10 * MSin1Minute) / MSin1Minute; //remainder
sprintf(cstr, "%01d", num);
inArr[4] = cstr[0];
unsigned long secondsMS = timeInMS % MSin1Minute;
num = secondsMS / 10000; //tens of seconds
sprintf(cstr, "%01d", num);
inArr[6] = cstr[0];
num = (secondsMS % 10000) / 1000; //remainder
sprintf(cstr, "%01d", num);
inArr[7] = cstr[0];
}
我使用调用函数
getTimeStr(lightOffTime, lightTurnOffTime);
然后我可以使用Serial.println(lightOffTime);
将其打印到串行
正如你所看到的,我只是在MS中输入数组和时间,它应该以格式化字符串的形式弹出时间。有什么想法吗-我传入的具体号码是68401000(19:00:01(,由于某种原因,它正在打印19:00:01h
您必须在字符串的末尾有一个null终止符来告诉打印函数在哪里停止打印。很可能只是碰巧,内存中的下一个点恰好有一个0,直到你得到那个特定的数字,无论出于什么原因,在这种情况下,内存中数组的后面会有一个h,然后很明显,在那之后会有0,因为它停在了那里。
因此,它与其他数字一起工作只是一种侥幸。有时bug就是这样,你会犯一个错误,无论出于什么原因,在某些情况下它看起来都很好。这就是从数组末尾跑出来的本质。他们称之为"未定义行为",因为当你这样做时,无法预测会发生什么。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 从python中调用C++函数并获取返回值
- 矩阵向量乘法(cublasDgemv)返回零
- 为什么模板类中的对象不能返回值