找到C函数中的错误

时间:2013-02-19 12:34:19

标签: c

此函数将布尔值转换为字符串。 指出可能的运行时错误。

#define TRUE  1
#define FALSE 0

char* bool2Str(boolean x)
{
char result[5];

if (x == TRUE)
strcpy(result, "TRUE");

if (FALSE == x) 
strcpy(result, "FALSE");

return &(result[0]);
}

3 个答案:

答案 0 :(得分:11)

  1. 缓冲区溢出:“FALSE”是6个字节,包括strcpy将尽职尽责地写入的空终止符,但是只有5个空格。
  2. 本地临时函数由函数返回,使返回的值无法使用(除非我假设对它进行测试)。
  3. 0或1以外的值不会写任何内容。与其他两个错误相比,这相形见绌。

答案 1 :(得分:0)

  1. 数组结果的大小太短 - 至少应为6
  2. 数组不应该是堆栈数组。它必须是静态数组或动态分配的数组。
  3. 没有布尔类型是C.这是一个typedef吗?

答案 2 :(得分:0)

好吧,如果调用者使用不同的布尔值调用两次,则第二次调用将覆盖第一个调用的结果,因为它是相同的变量(如果它是静态的)。

但是,该变量结果不是静态的,因此被调用者尝试返回指向局部变量的指针,该局部变量将超出nanosec中的范围,这通常是运行时错误/错误的良好来源。 / p>

另外,如果我是对的(不是C大师...),strcpy (result,"FALSE")将六个字节复制到result,而result只能容纳五个元素(索引为0到4)