该函数将布尔值转换为字符串。 指出可能的运行时错误。在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]);
}
该函数将布尔值转换为字符串。 指出可能的运行时错误。在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]);
}
strcpy
会忠实地写,但这里只有空间5.那么,如果调用者使用不同的布尔值调用两次,第二次调用将覆盖第一次调用的结果,因为它是相同的变量(如果它是静态的)。
但是,该变量结果不是静态的,因此被调用者试图返回一个指向局部变量的指针,该变量超出了纳秒级的范围,这通常是运行时错误/错误的良好来源。
另外,如果我是对的(不是C大师...),strcpy (result,"FALSE")
复制六个字节到result
而result
只能容纳五个元素(索引0到4)。
以下是其中一个提示:包含5个字符的字符串需要多长时间_really_? – 2013-02-19 12:36:40
你最终解决了吗?实际上,它不属于这里,因为它是毫无疑问的......嗯,首先在ANSI-C中没有布尔值,其次当复制“FALSE”到缓冲区并从栈中返回指针时,分配的变量是致命的! – 2013-02-19 12:37:47
Offtopic:作业标签的定义:作业是在后台执行的一个进程,或者计划在稍后执行 – banuj 2013-02-19 12:39:53