我有以下代码:
char stringHour[50], stringMinute[50], stringSecond[50];
// lots of code...
itoa(hour, stringHour, 10);
itoa(minute, stringMinute, 10);
itoa(second, stringSecond, 10);
strcat(":", stringSecond);
strcat(":", stringMinute);
strcat(stringMinute, stringSecond);
// stringHour contains both HH and :SS:MM
strcat(stringHour, stringMinute);
drawText(HRES/2 - 4, VRES - GLYPH_HEIGHT*2,
stringHour, black);
hour
,minute
和second
都是整理。
我想要做的是下面的时间如下:HH:MM:SS。
变量保证在0到59之间(hout,0-24除外)。
drawText是正确的。
这段代码崩溃了我的程序,我发现它没有任何问题。你能吗?
谢谢你的时间!
答案 0 :(得分:2)
答案 1 :(得分:1)
此外,最好将数组初始化为零。
char stringHour[50] = {0}, stringMinute[50] = {0}, stringSecond[50] = {0};
然后尝试将猫的结果存储到字符串中以查看您的结果。
答案 2 :(得分:1)
失败的一点很可能就是这件事:
... stuff removed
strcat (":",
... other stuff removed
您几乎肯定不能strcat
填充您正在使用的平台上的字符串文字。
strcat
方法也存在缓冲区溢出安全问题。也许使用snprintf
可能是更好的选择?
答案 3 :(得分:1)
您无法修改字符串文字;请改用char buffer[] = "MyLiteral"
,然后使用strcat()
。
(这个事实背后的原因是编译器可以通过将字符串文字的多个实例合并到可执行文件的只读部分中的一个实例中来优化代码大小,因此如果您可以更改一个实例,那么&#39 ; d改变其他一切,这将导致不可预测的行为。)
答案 4 :(得分:1)
另外 - 你的strcat顺序相反。 strcat实际上是“连接” - 所以改变顺序。 strcat(stringHour,“:”); strcat(stringHour,stringMinute); strcat(stringHour,“:”); strcat(stringHour,stringSecond);
然而,这非常糟糕 - 为什么不使用sprintf?另外 - 除了字符串构建之外的其他库 - 可能会查看BSL。 C标准库实际上也没有对你进行错误检查 - 所以除非你确切地知道你正在做什么以及str *系列函数的预期,否则它就是你自己的脚步。