該函數將布爾值轉換爲字符串。 指出可能的運行時錯誤。在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