此函数将布尔值转换为字符串。指出可能的运行时错误。
#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]);
}
此函数将布尔值转换为字符串。指出可能的运行时错误。
#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]);
}
strcpy
将尽职地写入的空终止符,但只有 5 个空间。好吧,如果调用者使用不同的布尔值调用它两次,第二次调用将覆盖第一次调用的结果,因为它是同一个变量(如果它是静态的)。
但是,该变量结果不是静态的,因此被调用者尝试返回一个指向局部变量的指针,该变量将在纳秒内超出范围,这通常是运行时错误/错误的良好来源。
另外,如果我是对的(不是 C 大师......),strcpy (result,"FALSE")
复制六个字节到result
whileresult
只能容纳五个元素(索引 0 到 4)。