次の方法で共有


C6384

更新 : 2007 年 11 月

警告 C6384: ポインタのサイズを別の値によって除算しています

この警告は、サイズ計算が正しくないことを示します。配列内の要素の数を計算するために、配列のサイズを最初の要素のサイズで除算する方法がありますが、配列が実際にはポインタである場合、意図したとおりの結果が得られません。

ポインタが関数パラメータであり、バッファのサイズが渡されなかった場合、使用できるバッファの最大値は計算できません。ポインタがローカルで割り当てられる場合、その割り当てに使用するサイズを使用します。

使用例

この警告が発生するコード例を次に示します。

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, sizeof dest  / sizeof dest[0]); 
  }
}

この警告を解決するには、次のコードに示すようにバッファ サイズを渡します。

#include <windows.h>
#include <TCHAR.h>

#define SIZE 15

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy(dest, src, SIZE);
  }
}

安全な文字列関数 _tcsncpy_s を使用してこの警告を解決するには、次のコードを使用します。

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
   _tcsncpy_s(dest, SIZE, src, SIZE);
  }
} 

参照

参照

_mbsnbcpy_s、_mbsnbcpy_s_l

sizeof Operator