连接问题+ itoa

时间:2011-01-01 17:15:37

标签: c string strcat itoa

我有以下代码:

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);

hourminutesecond都是整理。

我想要做的是下面的时间如下:HH:MM:SS。

变量保证在0到59之间(hout,0-24除外)。

drawText是正确的。

这段代码崩溃了我的程序,我发现它没有任何问题。你能吗?

谢谢你的时间!

5 个答案:

答案 0 :(得分:2)

这是错误的:

strcat(":", stringSecond);

您不能将字符串文字用于第一个参数。请参阅strcat doc。

答案 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 *系列函数的预期,否则它就是你自己的脚步。