この関数は、ブール値を文字列に変換します。実行時のバグの可能性を指摘します。
#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 分のスペースしかありません。呼び出し元がこれを異なるブール値で 2 回呼び出した場合、同じ変数であるため (静的変数の場合)、2 回目の呼び出しで最初の呼び出しの結果が上書きされます。
ただし、その変数の結果は静的ではないため、呼び出し先はローカル変数を指すポインターを返そうとしますが、これはナノ秒で範囲外になります。これは通常、実行時エラー/バグの良い原因です。
また、私が正しければ (C の第一人者ではありません...)、strcpy (result,"FALSE")
6 バイトをコピーすると、 5 つの要素 (インデックス 0 から 4) しか保持できませんresult
。result